繁体   English   中英

MySQL多表剩余联接最后一个表

[英]Mysql multiple tables left join last table

我在这里检查了几个线程,找不到我的问题的答案。...我试图用多个表进行mysql查询,并让其加入最后一个表。 它不喜欢左联接,当我包括它时也没有任何结果。 任何帮助是极大的赞赏 :)

(我正在使用Joomla)

query = "SELECT DISTINCT u.id as uid, CONCAT(u.first_name,' ',u.last_name) as name1,
 u.grad as   grad, u.opt_out as opt_out
FROM #__bl_teams as t, #__bl_regions as r, #__users as u 
LEFT JOIN #__bl_paid as pd ON pd.u_id = u.id

WHERE u.team_id = t.id AND u.team_id != '' AND u.s_id = $sid 
AND ((t.id = $tid)OR($tid=0)) AND (t.id IN ($teamsfull)) 
AND ( (t.id IN(".$tc_teams."))OR(".$tc_id." = 0)) 
AND ((r.id = ".$mid.")OR(".$mid." = 0)) 
AND ((r.s_id = ".$sid.")OR(".$mid." = 0)) 
AND ( (FIND_IN_SET(t.id,r.teams) )OR(".$mid." = 0) ) 
AND u.id NOT IN($paidrows) AND u.id NOT IN ($rsrows) GROUP BY u.id";
    $db->setQuery($query, $pageNav->limitstart, $pageNav->limit);
    $rows50 = $db->loadObjectList();

您正在混合旧式联接和新式联接。 那是你的问题。 表别名在整个from语句中无法被识别,就像您期望的那样。 文档中埋有以下警告:

但是,逗号运算符的优先级小于INNER JOIN,CROSS JOIN,LEFT JOIN等。 如果在存在联接条件时将逗号联接与其他联接类型混合使用,则可能会出现“ on子句”中形式为“未知列” col_name”的错误。 本节稍后将提供有关解决此问题的信息。

简单规则:请勿在from子句中使用逗号。

因此,使用显式联接重写查询,这将解决问题。

我不知道精算表,但是此查询太长,将产生意外结果。 无论如何,左也加入其他表。

query = "SELECT DISTINCT u.id as uid, CONCAT(u.first_name,' ',u.last_name) as name1, 
u.grad as   grad, u.opt_out as opt_out

FROM #__users as u 

LEFT JOIN #__bl_paid as pd ON pd.u_id = u.id
LEFT JOIN #__bl_teams as t ON t.u_id = u.id
LEFT JOIN #__bl_regions as r ON r.u_id = u.id

WHERE u.team_id != '' 
AND u.s_id = $sid 
AND ((t.id = $tid)
OR($tid=0)) 
AND (t.id IN ($teamsfull)) 
AND ( (t.id IN(".$tc_teams."))
OR(".$tc_id." = 0)) 
AND ((r.id = ".$mid.")
OR(".$mid." = 0)) 
AND ((r.s_id = ".$sid.")
OR(".$mid." = 0)) 
AND ( (FIND_IN_SET(t.id,r.teams) )
OR(".$mid." = 0) ) 
AND u.id NOT IN($paidrows) 
AND u.id NOT IN ($rsrows) 
GROUP BY u.id";

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM