【发布时间】:2013-03-04 00:31:21
【问题描述】:
我无法找出执行此 MySQL 语句的最佳方法。
第一个表 'friends' 有 userID、friendID 和 status
第二个表'users'有firstName、lastName、userID
第三个表'users_temp'有tempUserID,tempUserName
我希望有一个查询从用户 ID 或朋友 ID = 1 的“朋友”中全部提取并加入另一个字段(如果用户 ID = 1,则获取朋友 ID,或者如果朋友 ID = 1,则获取用户 ID)到“用户”/ 'users_temp' 其中 userID = users.userID 并离开加入 users_temp(如果存在)。
现在我有这个,但它总是返回错误的结果。它返回的用户 ID 也必须是唯一的,所以我只为每个用户返回 1 个(因为这是一个朋友列表)
SELECT users.userid,
users.fbid AS fbID,
users.firstname AS firstName,
users.lastname AS lastName,
users.phonenumber AS phoneNumber,
users.avatar AS avatar,
users_temp.tempusername AS tempUserName,
status,
friendid
FROM users
JOIN (SELECT friendid,
userid,
status
FROM friends
WHERE friendid = $userid
AND ( ( status != 2 )
AND ( status != 3 ) )
UNION ALL
SELECT friendid,
userid,
status
FROM friends
WHERE userid = $userid
AND ( ( status != 2 )
AND ( status != 3 ) )) foo
ON users.userid = foo.userid
LEFT JOIN users_temp
ON users.userid = users_temp.tempuserid
我创建了一个 sqlfiddle,希望能进一步解释我的 sql 设置
http://sqlfiddle.com/#!2/690c3/4
任何帮助将不胜感激!
谢谢,
韦斯
【问题讨论】:
-
嗯.. 试试
UNION而不是UNION ALL? -
运气不好。