我试图做一个搜索功能,涉及三个表。
搜索用户并返回用户id 1
是返回用户的朋友。此外,还将从第三个表中筛选返回的用户,该表将检查该用户的标记。
所以我可以说,“返回有标签的用户 'Programming', 'Php'
在 userinterests table
如果返回的用户是 usr id 1
“是否”
我试着使用下面的查询,但是 Column 'id' in IN/ALL/ANY subquery is ambiguous
如果我删除左连接,那么它的工作。
SELECT n.id, n.firstName, n.lastName, t.id, t.tag, t.user_id, if(id in (
SELECT u.id as id from friends f, users u
WHERE CASE
WHEN f.following_id=1
THEN f.follower_id = u.id
WHEN f.follower_id=1
THEN f.following_id = u.id
END
AND
f.status= 2
), "Yes", "No") as isFriend
FROM users n
LEFT JOIN userinterests t on n.id = t.id
WHERE t.tag in ('Programming', 'Php')
感谢您抽出时间:)
2条答案
按热度按时间6ju8rftf1#
限定所有列名。您似乎知道这一点,因为所有其他列名都是限定的。
我不确定您的逻辑是否正确,但您可以通过限定列名来修复错误:
avkwfej42#
这就是你的方法:
1) 我曾经
INNER JOIN
而不是LEFT JOIN
对于与标记无关的跳过用户:Programming
以及Php
.2) 我将逻辑替换为查找与用户相关的朋友集
id
等于1
.只是好奇,这是什么意思
status = 2
?