0

フォロワーやフォローのようなツイッターのタッチで簡単なフォーラムを作っているので、次の表があります。

users

 1. id
 2. name

questions

 1. id
 2. description
 3. user_id//foreign key of users.id

answers

 1. id
 2. question_id//foreign key of questions.id
 3. description
 4. user_id//foreign key of users.id

follow

 1. from_user(which user)//foreign key of users.id
 2. to_user(following to which user)//foreign key of users.id

私の質問は次のとおりです

SELECT users.id, users.name, count(DISTINCT questions.id), count(answers questions.id), count(follow1.from_user), count(follow2.to_user) from users LEFT JOIN questions ON users.id = questions.user_id LEFT JOIN answers ON users.id = answers.user_id LEFT JOIN follow as follow1 ON users.id = follow1.from_user LEFT JOIN follow as follow2 ON users.id = follow2.to_user WHERE users.id = 1

これは正常に機能し、適切な結果が得られます。

しかし、同じクエリを使用する場合、WHEREINの句を次のように配置します

SELECT users.id, users.name, count(DISTINCT questions.id), count(answers questions.id), count(follow1.from_user), count(follow2.to_user) from users LEFT JOIN questions ON users.id = questions.user_id LEFT JOIN answers ON users.id = answers.user_id LEFT JOIN follow as follow1 ON users.id = follow1.from_user LEFT JOIN follow as follow2 ON users.id = follow2.to_user WHERE users.id IN (1, 3)

ユーザーID1のレコードのみが表示されます。3のレコードは表示されません。ただし、前のクエリについて説明すると、両方id'sで正常に機能し、適切なレコードが表示されます。

4

1 に答える 1

1

これは奇妙なことGROUP BY users.idです。mysqlがすべてのレコードのcount()を結合しないように使用することを提案することしかできません。何らかの形で役立つことを願っています。

于 2012-07-02T12:27:28.650 に答える