所以我目前得到了这个问题:
SELECT user_expertise.user_id, user_expertise.expertise_id
FROM user_expertise
INNER JOIN user_locations ON user_expertise.user_id = user_locations.user_id
WHERE user_expertise.expertise_id!=$exid AND user_locations.location_id = $_SESSION["user"]["location"]["location_id"]
ORDER BY user_expertise.user_id
$exid
是专业知识的当前ID,$_SESSION["user"]["location"]["location_id"]
是从会话中检索的当前位置ID。为了这个例子,我们说$exid = 3981
和$_SESSION["user"]["location"]["location_id"] = 24
。
我只想检索没有附加expertise_id
$exid (3981)
的用户。当前的问题是,附加了这个id的用户在他们还有另一个附加到他们的用户时会显示。假设user_id
22
的用户有3981
和6523
。在这种情况下,我不希望他成为结果的一部分,但他是。起初他没有被选中,因为他3981
附加了他,但后来他被选中,因为他也有6523
。
更新:所以我对用于执行查询的代码感到有点生气,并在一个新代码中重新编写其中一个代码,这样我就可以传入一个完整的查询字符串。现在我可以尝试你所有的想法而不会头疼。
答案 0 :(得分:0)
试试这个:
SELECT p.user_id, p.expertise_id FROM (
SELECT s.user_id, s.expertise_id,t.expertise_id,
CASE WHEN s.expertise_id = t.expertise_id THEN 1 ELSE 0 as ind
FROM user_expertise s
INNER JOIN user_locations ss ON s.user_id = ss.user_id
CROSS JOIN user_expertise t
WHERE t.user_id = $exid
AND s.user_id <> t.user_id
AND ss.location_id = $_SESSION["user"]["location"]["location_id"]) p
GROUP BY p.user_id, p.expertise_id
HAVING MAX(p.ind) = 0
答案 1 :(得分:0)
您可以直接对表应用条件,无需在连接结果上添加条件。它也更具可读性。
SELECT user_expertise.user_id, user_expertise.expertise_id
FROM user_expertise
WHERE 1=1
AND user_expertise.user_id NOT IN
(SELECT user_id FROM user_expertise WHERE expertise_id=$exid)
AND user_expertise.user_id IN
(SELECT user_id from user_locations where location_id = $_SESSION["user"]["location"]["location_id"])
ORDER BY user_expertise.user_id