联合问题加入MySQL查询

时间:2010-06-03 14:49:00

标签: php mysql union

我设法从保存我最新帖子的表中选择

但我需要在选择中有双重条件

这是我的代码:

$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这个需求时我错了吗?!

3 个答案:

答案 0 :(得分: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 :(得分: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

如果您需要区分UNION的哪一部分已经返回,请返回一个额外的列:

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

答案 2 :(得分:1)

  
    

@Mac Taylor

         嘿,伙计,确定你理解我,告诉你我需要在你写的这句话中添加一个条件,AS My_Real_Sender ..因为你可能知道你写的这句话很好找到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