2011-05-16 200 views
2

我有一个名为entry的mySQL表。它里面有2个测试记录:mySQL查询帮助

SELECT * FROM entry WHERE typeId = 2 

SELECT * FROM entry WHERE typeId = 2

我有不同的类型。例如,当typeId = 2这是一个问题。当typeId = 3时,这是一个答案。当一个答案被插入到这个表格中时,linkId列会填入它正在回答的问题的entryId。

例如:

SELECT * FROM entry WHERE typeId = 3 

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 

above sql statement results

根据上面的语句我有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)。

这是结果:

SQL Left Join no COUNT

当我把在COUNT声明它只返回返回时,它是内部1个记录加入:

with COUNT and INNER JOIN

任何想法?

UPDATE:

我能得到的行通过确保LEFT JOIN是正确的,当我加了GROUP BY,然后用0回答行正常返回正常返回。

enter image description here

见下面我的查询。感谢所有帮助!

回答

0

其实我得到它的工作...

这里我的最新声明:

SELECT e1.entryId, e1.entryText, e1.voteCount AS voteCount, 
USER.userName, USER.fbId, COUNT(e2.linkId) 
FROM entry e1 
INNER JOIN USER ON e1.userId = USER.userId 
LEFT JOIN entry e2 
ON e2.linkId = e1.entryId 
WHERE e1.active = 1 
AND e1.typeId = 2 
GROUP BY e1.entryId 
ORDER BY e1.voteCount DESC 

我按照建议添加了LEFT JOIN,但我也确保连接是正确的,拼图的最后一部分是GROUP BY。一旦我把它放进去,我得到了我最初寻找的2排。

enter image description here

感谢所有帮助!

4

我想你第二个加入入境表应该是左连接:

INNER JOIN entry AS e2 ON e2.linkId = entry.entryId AND e2.active=1 

应该是:

LEFT JOIN entry AS e2 ON e2.linkId = entry.entryId AND e2.active=1 
+0

我同意@Tudor,尝试使用LEFT JOIN,这应该清除你的问题。 – Jako 2011-05-16 04:24:31

+0

和@Jako - 我试过了,仍然得到了相同的结果。查看更新的信息。 – webdad3 2011-05-16 05:16:00

+0

如果您尝试通过entry.entryId而不是e2.entryId进行计数,该怎么办? – 2011-05-16 05:38:31