2011-05-16 18 views
2

私は、エントリと呼ばれるmySQLテーブルを持っています。私はさまざまな種類がありmySQLクエリヘルプ

SELECT * FROM entry WHERE typeId = 2 

SELECT * FROM entry WHERE typeId = 2

:それはそれで2つのテストレコードを持っています。たとえば、typeId = 2の場合、これは疑問です。 typeId = 3の場合は答えです。このテーブルに回答が挿入されると、linkIdカラムには、回答している質問のentryIdが入力されます。例えば

SELECT * FROM entry WHERE typeId = 3 

SELECT * FROM entry WHERE typeId = 3

あなたはこれらのレコードの両方を見ることができるようには、私は次のクエリではエントリId = 1

に= 3とLINKID両方のポイントTYPEIDされていますそれに関連する答えを持っている質問だけが得られます。

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

私はTYPEID = 2である2つのエントリだから私はアウトとエントリの両方のエントリが、明らかにanswerCountを返すために、本当にこの文たいすべての答えを持っている上記の文によると、

希望の結果を得るためにこのクエリを修正するように私が示したことはありますか?

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 

私はカウント声明(answerCount AS COUNT(e2.entryId))を出したこの文で。

これが結果です:私はCOUNT文で入れると

SQL Left Join no COUNT

それだけで、それは内部結合したときに返さ1つのレコードを返します。

with COUNT and INNER JOIN

どれでもアイデア?

UPDATE:

私は行がLEFT JOINを正しかったと私はGROUP BYを追加したときに、その後、0の答えと行が正常に戻っていることを確認して、適切に返却してもらうことができました。

enter image description here

以下の私のクエリを参照してください。すべての助けてくれてありがとう!私は左である必要があり、あなたの2つ目のエントリテーブルに参加すると思います

答えて

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

+0

と@Jako - 私はそれを試みたが、同じ結果を得た。更新情報を参照してください。 – webdad3

+0

e2.entryIdの代わりにentry.entryIdによってカウントしようとするとどうなりますか? –