3

MySQL クエリに問題があります (私は初心者なので、気楽にやってください!)。私はテレビ番組の Web サイトを持っており、2 つの異なるアクション (カスタム スケジュール用) に基づいて、2 つの日付の間に放映されたエピソードを選択したいと考えています (問題ありません)。基本的に、ユーザーがフォローしている (uses_follow_shows) か、ショーを見ている (user_watched) 場合にエピソードを表示したいので、以下のように (query_on_follow OR query_on_watch) すると思ったのですが、うまくいきません (1200 行を取得しています) 3 ではなく、user_watched から既存のすべての行をフェッチしています)。

このステートメントはそれを行うと思っていましたが、そうではなく、理由がわかりません

SELECT * FROM show_episode_airdate, show_episode, show_network, network, shows, users_follow_shows, user_watched
                                              WHERE show_episode_airdate.airdate BETWEEN '2013-07-20' AND '2013-07-27' 
                                              AND ( show_episode.episode_id = show_episode_airdate.episode_id 
                                              AND shows.id = show_network.show_id
                                              AND show_network.network_id = network.network_id 
                                              AND show_episode.imdb_id_show = shows.imdb_id 
                                              AND users_follow_shows.user_id = 2 AND shows.id = users_follow_shows.show_id  

                                              OR user_watched.user_id = 2 
                                              AND shows.id = user_watched.show_id 
                                              AND show_episode.episode_id = show_episode_airdate.episode_id 
                                              AND shows.id = show_network.show_id
                                              AND show_network.network_id = network.network_id 
                                              AND show_episode.imdb_id_show = shows.imdb_id )
                                              ORDER by network.network_id ASC

誰が何が悪いのか教えてもらえますか?

ありがとう!

編集:

SELECT *
 FROM show_episode_airdate join
 show_episode 
 on show_episode.episode_id = show_episode_airdate.episode_id join
 shows
 on shows.imdb_id = show_episode.imdb_id_show join
 show_network
 on show_network.show_id = shows.id join
 network
 on show_network.network_id = network.network_id join
 users_follow_shows
 on shows.id = users_follow_shows.show_id join
 user_watched
 on shows.id = user_watched.show_id 
WHERE show_episode_airdate.airdate BETWEEN '2013-07-20' AND '2013-07-27' and
  (users_follow_shows.user_id = 2  or
   user_watched.user_id = 2
  )
 ORDER by network.network_id ASC;
4

3 に答える 3

0

()たとえば、それが目標である場合は、OR 条件を設定する必要があります。

SELECT * FROM show_episode_airdate, show_episode, show_network, network, shows, users_follow_shows, user_watched
WHERE show_episode_airdate.airdate BETWEEN '2013-07-20' AND '2013-07-27' 
AND ( (show_episode.episode_id = show_episode_airdate.episode_id 
AND shows.id = show_network.show_id
AND show_network.network_id = network.network_id 
AND show_episode.imdb_id_show = shows.imdb_id 
AND users_follow_shows.user_id = 2 
AND shows.id = users_follow_shows.show_id)
OR (user_watched.user_id = 2 
AND shows.id = user_watched.show_id 
AND show_episode.episode_id = show_episode_airdate.episode_id 
AND shows.id = show_network.show_id
AND show_network.network_id = network.network_id 
AND show_episode.imdb_id_show = shows.imdb_id ) )
ORDER by network.network_id ASC

したがって、次のようになります:最初のIF BETWEEN日付(条件) 2 番目 (条件)ANDOR

JOIN/を使用することをお勧めしますINNER JOIN。これらすべての AND で迷ってしまいました :D

于 2013-07-24T10:34:28.640 に答える