2012-01-09 130 views
0

我已经研究了将多个sql语句组合为一个,但无法使其工作。将两个SQL语句合并为一个语句

我基本上有两个陈述,我想合并为一个将被查询的陈述。

这里有两种说法:

$sql="SELECT DISTINCT u.".($config->realnames ? "name" : "username")." AS displayname, u.id 
FROM (#__users AS u INNER JOIN #__uddeim AS um ON u.id=um.fromid) 
WHERE um.toid=".(int)$myself." AND um.totrash=0 AND `um`.`delayed`=0".$filter. 


$sql2="SELECT DISTINCT u.".($config->realnames ? "name" : "username")." AS displayname, u.id 
FROM (#__users AS u INNER JOIN #__uddeim AS um ON u.id=um.toid) 
WHERE um.fromid=".(int)$myself." AND um.totrashoutbox=0".$filter." AND um.systemflag=0" 

这里是我用两个别名“U”他们结合的尝试,和“o”:

$filter=""; 
if ($filter_user) $filter = " AND um.fromid=".(int)$filter_user; 
if ($filter_user==-1) $filter = " AND um.fromid=0"; 
if ($filter_unread) $filter .= " AND um.toread=0"; 
if ($filter_flagged) $filter .= " AND um.flagged<>0"; 

$sql= "SELECT DISTINCT u.".($config->realnames ? "name" : "username")." AS displayname, u.id, o.".($config->realnames ? "name" : "username")." AS displayname, o.id 
FROM (#__users AS u INNER JOIN #__uddeim AS um ON u.id=um.fromid) INNER JOIN #__uddeim AS om ON o.id=om.toid 
WHERE um.toid=".(int)$myself." AND um.totrash=0 AND `um`.`delayed`=0".$filter. " AND om.fromid=".(int)$myself." AND om.totrashoutbox=0".$filter." AND om.systemflag=0"; 

但这快到了没有结果,前两个陈述中,单独工作正常。

任何帮助表示赞赏。

+0

是什么'$ filter.'? – davogotland 2012-01-09 00:44:39

+0

这是另一个变量,如果设置了过滤器,它就会携带一组条件。 – 2012-01-09 00:47:44

+0

您可能正在寻找'UNION'来将两个结果集合在一起。 – 2012-01-09 00:51:28

回答

1

尝试这个办法:在查询一个应该做到底

$sql=" 
SELECT 
    DISTINCT u.".($config->realnames ? "name" : "username")." AS displayname, 
    u.id 
FROM 
    (#__users AS u 
INNER JOIN 
    #__uddeim AS um 
ON 
    u.id=um.fromid) 
WHERE 
    um.toid=".(int)$myself." 
AND 
    um.totrash=0 
AND 
    `um`.`delayed`=0".$filter." 
UNION ALL 
SELECT 
    DISTINCT u.".($config->realnames ? "name" : "username")." AS displayname, 
    u.id 
FROM 
    (#__users AS u 
INNER JOIN 
    #__uddeim AS um 
ON 
    u.id=um.toid) 
WHERE 
    um.fromid=".(int)$myself." 
AND 
    um.totrashoutbox=0".$filter." 
AND um.systemflag=0" 
+0

非常感谢,工作! – 2012-01-09 00:54:00

+0

@ muistooshort对,那个upvote是你的mu,不是吗? – davogotland 2012-01-09 01:05:20

+1

是的,UNION ALL是一个很好的解决方案,你应该剔除奇怪格式化的SQL。我也有整齐格式化的代码。 – 2012-01-09 01:10:13