我想在我的数据库中搜索一个用户,并为每个用户在另一个表上进行 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`;
relations
实际上,如果搜索到的用户显示为fan_id
AND 搜索用户为idol_id
或相反,我想进入。但是当我使用第一个查询搜索用户时,我有 2 行,2 个用户(ids = 80
& 125
)。对于第二个查询,我只有 1 行 (id = 80
),但relations
显示100:80;100:125
我有一半的查询工作......
有关信息,如果没有 (in relations
),我也想得到一个结果,所以我尝试IFNULL(..., 0)
了但仅此而已。
谢谢您的帮助。