0

私は2つのテーブルを持っています

Sleep_sessions [id, user_id, (その他の値)]

トーン[id, sleep_sessions.id (FK), (その他の値)]

user_id = 55 で、各 sleep_session レコードに少なくとも 2 つのトーン レコードが関連付けられている 10 個の sleep_sessions を選択する必要があります。

現在、次のものがあります。

SELECT `sleep_sessions`.*
FROM (`sleep_sessions`)
JOIN `tones` ON sleep_sessions.id = `tones`.`sleep_session_id`
WHERE `user_id` = 55
GROUP BY `sleep_sessions`.`id`
HAVING count(tones.id) > 4
ORDER BY `started` desc
LIMIT 10

ただし、 count(tone.id) は基本的にトーンテーブル全体であり、現在参加している sleep_session ではないことに気付きました

助けてくれて本当にありがとうございます、

アンディ

4

1 に答える 1

1

クエリの何が問題だったのかわかりません。たぶん、試してみてください

HAVING count(*)

次のクエリはもう少し読みやすいかもしれません (理解するのが少し面倒かもしれません):

SELECT *
FROM (`sleep_sessions`)
WHERE `user_id` = 55
AND (SELECT count(*) FROM `tones` 
     WHERE `sleep_sessions`.`id` = `tones`.`sleep_session_id`) > 4
ORDER BY `started` desc
LIMIT 10

GROUP BYこれの利点は、節と句の間に作成した間違ったセマンティクスを台無しにしないという事実ですORDER BY。元のクエリを受け入れるのは MySQL だけです。ここにいくつかの洞察があります:

http://dev.mysql.com/doc/refman/5.6/en/group-by-hidden-columns.html

于 2012-07-12T15:11:37.163 に答える