奇妙なSQLクエリに問題があります。MySQL を使用していて、データベース構造を変更したいのですが、できません。だから私はクエリで私の問題を解決しなければなりません。
だから私は3つのテーブルを持っています。Challenges、Users_challenges、Users_subscribed。私がそこから抜け出すために必要なもの 3 は次のとおりです。
challenge.private = 0 のすべてのチャレンジのリストが必要で、現在のユーザー ID (users_challenges.iduser = 414) の下の Users_challenges に表示されるすべてのチャレンジを除外する必要があります。次に、challenges.private = 1 または 0 を持つことができる課題が必要ですが、それらは 3 番目のテーブル (users_subscribed.iduser = 414) にリストされており、ここでもすべての読み取り ID を課題テーブルから除外する必要があります。最後に、すべての結果をまとめて、時間と制限で並べ替える必要があります。
少なくとも私にとってはかなり紛らわしいので、それが正しいことを願っています:D
現在のクエリの実行には 26 秒かかります。
SELECT *
FROM challenges
WHERE challenges.private = 0
AND challenges.isquest = 1
AND challenges.title like '%%'
AND challenges.id NOT
IN (
SELECT users_challenges.idchallenge
FROM users_challenges
WHERE users_challenges.iduser = 414
AND users_challenges.idquest IS NULL
GROUP BY users_challenges.idchallenge
)
UNION
SELECT *
FROM challenges
WHERE challenges.isquest = 1
AND challenges.title like '%%'
AND challenges.iduser
IN (
SELECT users_subscriptions.idsubscribedto
FROM users_subscriptions
WHERE users_subscriptions.iduser = 414
UNION
SELECT 414 AS idsubscribedto
)
AND challenges.id NOT
IN (
SELECT users_challenges.idchallenge
FROM users_challenges
WHERE users_challenges.iduser
IN (
SELECT users_subscriptions.idsubscribedto
FROM users_subscriptions
WHERE users_subscriptions.iduser = 414
UNION
SELECT 414 AS idsubscribedto
)
AND users_challenges.idquest IS NULL
GROUP BY users_challenges.idchallenge
)
ORDER BY TIME DESC
LIMIT 0,30
このクエリを簡素化し、同じ結果をより速く得る方法はありますか? どうも