2010-06-03 56 views
0

我设法从节省我的最新文章问题在联盟加入对于MySQL查询

一个表中选择,但我需要有双重条件在选择

这里是我的代码:

$sql_query = "SELECT b.*,u.username AS MY_Sender 
FROM TABLE_users u,TABLE_blogs b 
Where b.reciever = '0' AND u.user_id = b.sender 
UNION 
SELECT b.*,u.username AS MY_reciever 
FROM TABLE_users u,TABLE_blogs b 
Where b.reciever != '0' AND u.user_id = b.reciever 
ORDER BY bid DESC 
LIMIT 0,7 "; 

MY_reciever是空的和空的

我在使用UNION这个需要?

回答

2
SELECT b.*,u.username AS MY_Sender, NULL AS MY_reciever 
FROM TABLE_users u,TABLE_blogs b 
Where b.reciever = '0' AND u.user_id = b.sender 
UNION 
SELECT b.*, NULL AS MY_Sender, u.username AS MY_reciever 
FROM TABLE_users u,TABLE_blogs b 
Where b.reciever != '0' AND u.user_id = b.reciever 
1

跨工会的各个部分的列必须具有相同的名称。 尝试:

SELECT b.*, 
     u.username AS MY_User 
    FROM TABLE_users u, 
     TABLE_blogs b 
WHERE b.reciever = '0' 
    AND u.user_id = b.sender 
UNION 
SELECT b.*, 
     u.username AS MY_User 
    FROM TABLE_users u, 
     TABLE_blogs b 
WHERE b.reciever != '0' 
    AND u.user_id = b.reciever 
ORDER BY bid DESC 
LIMIT 0,7 

如果您需要区分其中记录已被返回联盟的一部分,返回一个额外的列:

SELECT b.*, 
     u.username AS MY_User. 
     'Sender' AS MyType 
    FROM TABLE_users u, 
     TABLE_blogs b 
WHERE b.reciever = '0' 
    AND u.user_id = b.sender 
UNION 
SELECT b.*, 
     u.username AS MY_User. 
     'Recipient' AS MyType 
    FROM TABLE_users u, 
     TABLE_blogs b 
WHERE b.reciever != '0' 
    AND u.user_id = b.reciever 
ORDER BY bid DESC 
LIMIT 0,7 
+0

它不是寻找真正的海报的工作,我的意思是完全相同的条件:u.user_id = b.sender应该被添加到该语句,如同真正的海报,我怎么可以加入条件 – 2010-06-03 15:59:09

+0

我不确定我明白你在问什么 – 2010-06-03 22:11:22

+0

在联盟中,列必须匹配***数据类型***,而不是名称。 – 2010-06-03 22:27:48

1

@Mac泰勒

嘿,你确定你了解我,告诉你我需要在你写的这个声明中增加一个条件,AS My_Real_Sender ..你可能知道你写的这个声明是f INE找到Reciver(MY_Type),而不是后

的发送者你的意思是这样的吗?

SELECT b.*, 
     u.username AS MY_Sender. 
     NULL as MY_Recipient, 
     'Sender' AS MyType 
    FROM TABLE_users u, 
     TABLE_blogs b 
WHERE b.reciever = '0' 
    AND u.user_id = b.sender 
UNION 
SELECT b.*, 
     u1.username AS MY_Sender. 
     u2.username AS MY_Recipient. 
     'Recipient' AS MyType 
    FROM TABLE_users u1, 
     TABLE_users u2, 
     TABLE_blogs b 
WHERE b.reciever != '0' 
    AND u1.user_id = b.reciever 
    AND u2.user_id = b.sender 
ORDER BY bid DESC 
LIMIT 0,7 
+0

感谢兄弟/我测试了你的脚本,但在阅读中的问题,并没有工作,你确定,上面的代码没有语法错误?! – 2010-06-04 15:03:50