【发布时间】:2012-09-07 21:43:35
【问题描述】:
我想在我的数据库中搜索一个用户,并为每个用户在另一个表上进行 JOIN。这是我的表格:
USERS: id, firstname, lastname, [...] - 包含用户数据
FRIENDS: fan_id, idol_id, [...] - 哪个用户关注哪个用户
这是我的经典搜索查询:
SELECT `id`, `username`, `firstname`, `lastname`, `lang`, `twitter`, `facebook`, `picture`, `regdate`
FROM `users`
WHERE `username` LIKE ?
OR `email` LIKE ?
OR `firstname` LIKE ?
OR `lastname` LIKE ?
OR `twitter` LIKE ?
OR `facebook` LIKE ?
ORDER BY `username`;
所以现在,我想要一个获取好友表,其中包含搜索到的用户和提出此问题的用户之间的关系。
这是我的想法:
SELECT `id`, `username`, `firstname`, `lastname`, `lang`, `twitter`, `facebook`, `picture`, `regdate`,
GROUP_CONCAT(
CONCAT_WS(':', `fan_id`, `idol_id`) SEPARATOR ';'
) AS relations
FROM `friends`, `users`
WHERE (`username` LIKE ?
OR `email` LIKE ?
OR `firstname` LIKE ?
OR `lastname` LIKE ?
OR `twitter` LIKE ?
OR `facebook` LIKE ?)
AND (
(`fan_id` = 100 AND `idol_id` = `id`)
OR
(`fan_id` = `id` AND `idol_id` = 100)
)
ORDER BY `username`;
实际上,如果搜索用户显示为fan_id 并且搜索用户显示为idol_id 或相反,我想进入relations。
但是当我使用第一个查询搜索用户时,我有 2 行,2 个用户(ids = 80 & 125)。对于第二个查询,我只有 1 行(id = 80),但 relations 显示 100:80;100:125 表示我有一半的查询工作......
关于信息,如果没有(relations),我也想得到一个结果,所以我尝试了IFNULL(..., 0),但仅此而已。
感谢您的帮助。
【问题讨论】:
-
真的很难理解你真正想要什么。 fan_id 是检查自己与其他用户之间关系的用户的 id 吗?你想让他们看看被搜索的用户是正在搜索的用户的粉丝还是偶像?你为什么要连接这些结果?为什么不只是两栏,一栏是偶像,一栏是粉丝,分别是真还是假?
-
是的,很抱歉解释得不好。实际上,我想搜索用户,并与正在搜索用户的用户建立关系。然后在 PHP 中,我只需要计算关系(2 表示相互关注,1 表示我必须检查谁在关注)
-
我已经编辑了我的答案以包含我为您提出的另一个查询。
标签: mysql join concat group-concat