简单的MYSQL查询返回多行

时间:2013-12-18 03:27:17

标签: mysql

我的用户和朋友表有以下表格结构。

users: first_name, last_name

friends: to_id, from_id, friend_status

因此,如果用户4 and 7是朋友,我会将其作为4 | 7 | 17 | 4 | 1存储在朋友的表中,具体取决于发起友情的人。我不做重复的条目所以4 | 7 | 1和7 | 4 | 1未存储。只存储一个。

我的问题是当我想简单搜索名为Paul的朋友时。下面的每个片段都可以自己运行,但是在一起,我会得到多行显示不熟练的用户,甚至不是朋友。

SELECT u.* FROM `users` u, `friends` f WHERE CONCAT(u.first_name,' ',u.last_name) 
like '%paul%'  AND ((f.to_id=$logged_in_uid OR f.from_id=$logged_in_uid) 
AND f.friend_status=1);

同样,上面的内容甚至没有归还朋友,但仅后一部分确实会在朋友自己使用时带回来。

谢谢,真的很感激任何帮助:)

1 个答案:

答案 0 :(得分:1)

JOIN Conditionu之间没有f

你能试试吗?

SELECT u.*
FROM `users` u INNER JOIN `friends` f
    ON (u.user_id = f.to_id OR u.user_id = f.from_id) AND u.user_id != $logged_in_uid
WHERE CONCAT(u.first_name,' ',u.last_name) LIKE '%paul%'
    AND (
      (f.to_id=$logged_in_uid OR f.from_id=$logged_in_uid) 
      AND f.friend_status=1
    );

或者使用UNION摆脱OR,这会使事情变得复杂,无法使用索引。

SELECT u.*
FROM `users` u INNER JOIN `friends` f ON u.user_id = f.from_id
WHERE CONCAT(u.first_name,' ',u.last_name) LIKE '%paul%'
    AND f.to_id=$logged_in_uid AND f.friend_status=1

UNION

SELECT u.*
FROM `users` u INNER JOIN `friends` f ON u.user_id = f.to_id
WHERE CONCAT(u.first_name,' ',u.last_name) LIKE '%paul%'
    AND f.from_id=$logged_in_uid AND f.friend_status=1