0

現在、2つのクエリがあります。

$iQ = mysql_query("SELECT * FROM `movies` WHERE `released` > '" . $begin . 
    "' AND `released` < '" . $end . "' ORDER BY `views` DESC LIMIT 5");

while ($iR = mysql_fetch_array($iQ)) {
    $imageQ = mysql_query("SELECT * FROM `movie_image`
        WHERE `movie_id` = '" . $iR['id'] . "' AND `image_size` = 'thumb'
        AND `type` = 'poster' LIMIT 1");
}

これを1つのクエリに入れたいのですが、movie_imageテーブルに行がある場合にのみ結果を返したいのです。つまり、画像のない映画は結果セットに返されません。

これらの2つのクエリを結合して、最初のクエリで映画の画像を取得し、映画IDの映画の画像が存在する場合にのみ結果を返すにはどうすればよいですか?

わからない場合はお知らせください。質問を言い換えてみます。

4

4 に答える 4

0
SELECT * FROM `movies`
    INNER JOIN `movie_image` ON `movie_image`.`movie_id` = `movies`.`id`
    WHERE `movies`.`released` > '" . $begin . "'
    AND `movies`.`released` < '" . $end . "'
    AND `movie_image`.`image_size` = 'thumb'
    AND `type` = 'poster' ORDER BY `movies`.`views` DESC LIMIT 5

このクエリはうまくいくはずです。

于 2012-05-13T06:20:30.460 に答える
0

一致する画像の 1 つを選択したいが、どれを気にしない場合 (それが現在のクエリの動作です)、テーブルと映画 ID を結合するだけです(主キーなどにGROUP BYあると仮定します)。UNIQUEmovies

SELECT   *
FROM     movies
    JOIN movie_image 
      ON movie_image.movie_id = movies.id
     AND movie_image.image_size = 'thumb'
     AND movie_image.type = 'poster'
WHERE    movies.released BETWEEN :begin AND :end
GROUP BY movies.id
ORDER BY views DESC
LIMIT    5
于 2012-05-13T06:58:13.117 に答える
0

まず、ここでの関係は 1 対多の関係であるため、1 つのクエリで行うことはできません。

次に、映画の画像が存在する場合に映画を返すには、最初のクエリでそれを確認し、最初のクエリを繰り返して各映画に関連する画像を取得する必要があります。

$iq = "SELECT m.* FROM `movies` m 
      RIGHT JOIN `movie_images` mi ON mi.movie_id = m.movie_id
      WHERE `m.released` > '" 
      . $begin . "' AND `m.released` < '" . $end . "' GROUP BY `m.movie_id` ORDER BY `m.views` 
      DESC LIMIT 5";

$res = mysql_query($iq);
while($ir = mysql_fetch_assoc($res)){
  //get the images for each movie here
}
于 2012-05-13T06:23:39.510 に答える
0

このクエリが役立つと思います。ムービー テーブル識別子 = id(ms.id) の場合。

SELECT mi.* FROM movie_image mi
    JOIN movies ms ON mi.movie_id = ms.id
    WHERE ms.released > '" . $begin . "'
    AND ms.released < '" . $end . "'
    AND mi.image_size = 'thumb' AND mi.type = 'poster'
    ORDER BY ms.views DESC LIMIT 5
于 2012-05-13T06:23:48.467 に答える