嘿伙计们快速提问,我总是使用左连接,但是当我离开连接两次时,我总是得到有趣的结果,通常是重复的。我目前正在处理一个查询,左连接两次以检索所需的必要信息,但我想知道是否有可能构建另一个选择语句,所以我不需要两个左连接或两个查询或如果有更好的方法。例如,如果我可以先在table.topic中选择topic.creator,那么我可以在用户中选择该变量并离开连接table.scrusersonline。提前感谢任何建议。
SELECT * FROM scrusersonline
LEFT JOIN users ON users.id = scrusersonline.id
LEFT JOIN topic ON users.username = topic.creator
WHERE scrusersonline.topic_id = '$topic_id'
此查询的重点是检查topic.creator是否在线,方法是从table.topic中检索他的名字并在table.users中匹配他的id,然后检查他是否在table.scrusersonline中。它遗憾地产生重复的条目,因此在我看来是不准确的。
答案 0 :(得分:2)
如果您想要数据,请使用LEFT JOIN。在这种情况下,如果创建者处于脱机状态,则不会返回任何行将是一个很好的指示 - 所以删除LEFT连接并只进行常规连接。
SELECT *
FROM scrusersonline AS o
JOIN users AS u ON u.id = o.id
JOIN topic AS t ON u.username = t.creator
WHERE o.topic_id = '$topic_id'
答案 1 :(得分:1)
一种选择是对联接进行分组:
SELECT *
FROM scrusersonline
LEFT JOIN (users ON users.id = scrusersonline.id
JOIN topic ON users.username = topic.creator)
WHERE scrusersonline.topic_id = '$topic_id'
答案 2 :(得分:1)
尝试:
select * from topic t
left outer join (
users u
inner join scrusersonline o on u.id = o.id
) on t.creator = u.username
如果o.id为null,则表示用户处于离线状态。
答案 3 :(得分:0)
通过将条件移动到联接来匹配topic_id
表中的topics
不是更好。我认为这将解决您的问题,因为重复来自加入topics
表:
SELECT * FROM scrusersonline
JOIN users
ON users.id = scrusersonline.id
LEFT JOIN topic
ON scrusersonline.topic_id = '$topic_id'
AND users.username = topic.creator
顺便说一下,由于您似乎在搜索LEFT JOIN
和users
scrusersonline
users
{{1}}