動的条件があります。ときどき条件があり、時にはそうではありません。すべての結果を左側から取得したいが、条件と一致しない行は除外したい。私はこれを達成する方法はありますか?私が持っているものでは、常に左からすべての行が得られます。内部結合を使用すると、結合できない場合はベース・テーブルからレコードを取得しません。アニメテーブルからすべてのレコードを取得できる必要がありますが、条件が設定されている場合は条件に一致するレコードのみを取得します。LEFT JOINテーブルがありますが、条件が一致しない場合は除外されます。
SELECT anime.id, anime.title, IF(english IS NULL or english = '', anime.title, english) as english, anime.slug
FROM anime
LEFT JOIN genres g ON g.anime_id = anime.id
LEFT JOIN episodes e ON e.anime_id = anime.id
LEFT JOIN videos v on v.episode_id = e.id
$conds
GROUP BY anime.id
ORDER BY $order
LIMIT $limit
$ conds、$ order、および$ limitは、PHPで動的に生成されます。
条件の例は、私が左使用v.typeための条件が完全に無視されて参加し、それがアニメのテーブルからすべてのレコードを取得する場合、ここで問題がある
WHERE anime.status = 'completed' AND v.type = 'subbed'
です。
左結合を実行すると、アニメ表からすべての行が取得されます。しかし、条件がある場合はすべての行を取得せず、条件に一致する行のみを取得したいとします。しかし、条件がない場合は、とにかくすべての行を取得します。
LEFT JOINの代わりにINNER JOINを使用すると、アニメにエピソードや動画がない場合は、取得できませんが、取得する必要があります。
問題はどこですか? '$ conds'が設定されていると、' WHERE x = 'y''として、この条件に適合する行だけが選択されています。 – panther
$ condにあるものを見ることなく、あなたの質問に答える方法はありません。アニメ表に条件があると、行が除外される可能性があります。 –
例を追加 –