私は、エントリと呼ばれるmySQLテーブルを持っています。私はさまざまな種類がありmySQLクエリヘルプ
SELECT * FROM entry WHERE typeId = 2
:それはそれで2つのテストレコードを持っています。たとえば、typeId = 2の場合、これは疑問です。 typeId = 3の場合は答えです。このテーブルに回答が挿入されると、linkIdカラムには、回答している質問のentryIdが入力されます。例えば
:
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
私は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文で入れると
それだけで、それは内部結合したときに返さ1つのレコードを返します。
どれでもアイデア?
UPDATE:
私は行がLEFT JOINを正しかったと私はGROUP BYを追加したときに、その後、0の答えと行が正常に戻っていることを確認して、適切に返却してもらうことができました。
以下の私のクエリを参照してください。すべての助けてくれてありがとう!私は左である必要があり、あなたの2つ目のエントリテーブルに参加すると思います
私は@ Tudorに同意しますが、LEFT JOINを使用して問題を解決する必要があります。 – Jako
と@Jako - 私はそれを試みたが、同じ結果を得た。更新情報を参照してください。 – webdad3
e2.entryIdの代わりにentry.entryIdによってカウントしようとするとどうなりますか? –