我有一个名为entry的mySQL表。它里面有2个测试记录:mySQL查询帮助
SELECT * FROM entry WHERE typeId = 2
我有不同的类型。例如,当typeId = 2这是一个问题。当typeId = 3时,这是一个答案。当一个答案被插入到这个表格中时,linkId列会填入它正在回答的问题的entryId。
例如:
SELECT * FROM entry WHERE typeId = 3
正如你可以看到这两个记录是TYPEID = 3和链路ID都指向ENTRYID = 1
在下面的查询我只会得到与其相关的答案。
SELECT SQL_CALC_FOUND_ROWS
entry.entryId, entry.entryText, entry.voteCount AS voteCount,
USER.userName, USER.fbId, COUNT(e2.entryId) AS answerCount
FROM entry
INNER JOIN USER ON entry.userId = USER.userId
INNER JOIN entry AS e2 ON e2.linkId = entry.entryId AND e2.active=1
WHERE entry.active = 1
AND entry.typeId = 2
ORDER BY entry.voteCount DESC
根据上面的语句我有2项是TYPEID的= 2,所以我真的很喜欢这个语句返回两个条目,但显然answerCount与任何答案入境将是0.
有没有人有任何想法,我已经告诉你解决这个查询来获得所需的结果?
UPDATE:
基于关下方的建议。我改变了内连接至左连接:
SELECT SQL_CALC_FOUND_ROWS DISTINCT
entry.entryId, entry.entryText, entry.voteCount AS voteCount,
USER.userName, USER.fbId
FROM entry
INNER JOIN USER ON entry.userId = USER.userId
LEFT JOIN entry AS e2 ON e2.linkId = entry.entryId AND e2.active=1
WHERE entry.active = 1
AND entry.typeId = 2
ORDER BY entry.voteCount DESC
在此声明我拿出count语句(COUNT(e2.entryId)AS answerCount)。
这是结果:
当我把在COUNT声明它只返回返回时,它是内部1个记录加入:
任何想法?
UPDATE:
我能得到的行通过确保LEFT JOIN是正确的,当我加了GROUP BY,然后用0回答行正常返回正常返回。
见下面我的查询。感谢所有帮助!
我同意@Tudor,尝试使用LEFT JOIN,这应该清除你的问题。 – Jako 2011-05-16 04:24:31
和@Jako - 我试过了,仍然得到了相同的结果。查看更新的信息。 – webdad3 2011-05-16 05:16:00
如果您尝试通过entry.entryId而不是e2.entryId进行计数,该怎么办? – 2011-05-16 05:38:31