切换风格

Wizard Sky California Sunset glow Black Cloud Beige Dragon Lavender NewYear City Snow Flowers London
收藏本站XSS平台字符串转换jsfuck
php中跨表联合查询mysql中的LEFT JOIN是什么意思以及用法小总结[复制链接]
发表于 2013-4-11 00:36:09 | 显示全部楼层 |!read_mode!
sql语句如下:
left join(左联接)
SELECT * FROM a LEFT JOIN b ON a.aID =b.bID
left join是以A表的记录为基础的,A可以看成左表,B可以看成右表,left join是以左表为准的.。
换句话说,左表(A)的记录将会全部表示出来,而右表(B)只会显示符合搜索条件的记录(例子中为: A.aID = B.bID)。 B表记录不足的地方均为NULL。


right join(右联接)

SELECT * FROM a RIGHT JOING b ON a.aID = b.bID
仔细观察一下测试结果,就会发现和left join的结果刚好相反,这次是以右表(B)为基础的,A表不足的地方用NULL填充。


inner join(相等联接或内联接)
SELECT * FROM a INNER JOIN b ON a.aID =b.bID
等同于以下SQL句:
SELECT * FROM a,b WHERE a.aID = b.bID


inner join并不以谁为基础,它只显示符合条件的记录.
LEFT JOIN操作用于在任何的 FROM 子句中, 组合来源表的记录。
使用 LEFT JOIN 运算来创建一个左边外部联接。左边外部联接将包含了从第一个(左边)开始的两个表中的全部记录,即使在第二个(右边)表中并没有相符值的记录。


最后纪念一次超强的discuz拖库脚本(自定义字段)
<?php
	define('APPTYPEID', 100);
	define('CURSCRIPT', 'misc');
	require './source/class/class_core.php';
	$discuz = & discuz_core::instance();
	$discuz->init();
	$export_time = time();
if($_G['gp_ok'] == 'ok'){//sql一次2000条   50万条一个文件
	$member_list_count = DB::result_first("SELECT count(uid) FROM ".DB::table('common_member')." ");
	$sql_exec_num = ceil($member_list_count/2000);
	if($_G['gp_exec_num']){
		$exec_num     = $_G['gp_exec_num'];
	}else{
		$exec_num     = 0;
	}
	if($exec_num > $sql_exec_num){
		showmessage('全部导出完毕!');
	}
	$start_limit  = $exec_num * 2000;
	$end_limit    = 2000;
	
	$crm_data_dir = DISCUZ_ROOT . './data/cache/tmp/';
	$query = DB::query("SELECT m.uid,m.username,p.realname,p.telephone,p.mobile,m.email,m.emailstatus,p.qq,p.msn,p.field7,
							   u.lingyu,p.lingyu,p.graduateschool,p.position,p.field6,p.birthprovince,p.birthcity,p.birthdist,
							   p.resideprovince,p.residecity,p.residedist,p.field3,p.zdyzd2,p.zdyzd3,p.zdyzd4,m.regdate,i.xuexiao 
						FROM ".DB::table('common_member')." m LEFT JOIN ".DB::table('common_member_profile')." p ON m.uid=p.uid
						  LEFT JOIN ".DB::table('a_info')." i ON m.uid = i.uid 
						  LEFT JOIN ".DB::table('custom_userinfo')." u ON m.uid=u.uid
						order by m.uid asc limit $start_limit,$end_limit");
	while($member_list = DB::fetch($query)) {//LEFT JOIN ".DB::table('forum_order')." o ON m.uid=o.uid
		$member_list[amount] = DB::result_first("SELECT amount FROM ".DB::table('forum_order')." where uid='$member_list[uid]' ");
		$member_lists[] = $member_list;
	}
	
	if(!is_dir($crm_data_dir)){
		mkdir($crm_data_dir,0777);
	}
	$crm_data_file = $crm_data_dir.'members';
	$jiancha_huan_wenjian = $start_limit%500000;
	if($jiancha_huan_wenjian == 0){//能被500000整除时换文件
		for ($i=0;$i<=count($member_lists);$i++){
			$sql_row = "INSERT INTO `pre_a_crm_user_data` VALUES ('','".$member_lists[$i][uid]."', '".$member_lists[$i][username]."','".$member_lists[$i][realname]."', '".$member_lists[$i][telephone]."', '".$member_lists[$i][mobile]."', '".$member_lists[$i][email]."', '".$member_lists[$i][emailstatus]."', '".$member_lists[$i][qq]."','".$member_lists[$i][msn]."','".$member_lists[$i][field7]."','".$member_lists[$i][lingyu]."','".$member_lists[$i][graduateschool]."','".$member_lists[$i][position]."','".$member_lists[$i][field6]."', '".$member_lists[$i][birthprovince]."', '".$member_lists[$i][birthcity]."', '".$member_lists[$i][birthdist]."', '".$member_lists[$i][resideprovince]."', '".$member_lists[$i][residecity]."', '".$member_lists[$i][residedist]."', '".$member_lists[$i][field3]."', '".$member_lists[$i][zdyzd2]."', '".$member_lists[$i][zdyzd3]."', '".$member_lists[$i][zdyzd4]."', '100', '".$export_time."', '".$member_lists[$i][amount]."', '".$member_lists[$i][regdate]."', '0', null, null, null, '2');"."\r\n";
				$fp = fopen($crm_data_file."0".$exec_num.".sql","a+");//文件命名为  members00.sql/members01.sql
				fputs($fp, $sql_row);
				fclose($fp);
		}
	}
	$next_exec_num = $exec_num+1;
	showmessage("执行成功!","http://www.xxxxx.com/export_discuz_member.php?ok=ok&exec_num=".$next_exec_num,1);
}else{
	showmessage('error!');
}
?>








该贴已经同步到 抚菊深思的微博
操千曲而后晓声,观千剑而后识器。

代码区

GMT+8, 2019-12-14 10:34

Powered by Discuz! X2

© 2001-2018 Comsenz Inc.

回顶部