Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 加入mySQL查询并只返回某些结果?_Php_Mysql - Fatal编程技术网

Php 加入mySQL查询并只返回某些结果?

Php 加入mySQL查询并只返回某些结果?,php,mysql,Php,Mysql,我目前有两个问题: $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 `movi

我目前有两个问题:

$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");
}
$iQ=mysql\u query(“从'movies'中选择*,其中'released`>”。$begin。
“'和'released`<'”$end.“'views`DESC LIMIT 5'”命令;
而($iR=mysql\u fetch\u数组($iQ)){
$imageQ=mysql\u查询(“从`movie\u图像中选择*`
其中'movie\u id`='“$iR['id']”和'image\u size`='thumb'
“类型”=“海报”限制1”);
}
我想把它放到一个查询中,我只想在movie_image表中有行时返回结果,这意味着没有图像的电影不会在结果集中返回

如何连接这两个查询,以便在第一个查询中获得电影图像,并且仅在电影ID存在电影图像时返回结果

如果您不明白,请告诉我,我将尝试重新表述我的问题。

SELECT*FROM`movies`
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
在'movie\u image'上内部连接'movie\u image'。'movie\u id`='movies`.'id` 其中有“电影”。“发布”>“$begin.” 还有“电影”。“发布”<“$end.” 和'movie\u image'。'image\u size`='thumb' 和'type`='poster'按'movies'排序。'views`DESC LIMIT 5

这个查询应该适合您。

首先,这里的关系是一个一对多关系,所以您不能在一个查询中完成它

第二,如果存在电影图像,则要返回电影,需要在第一个查询中进行检查,然后迭代第一个查询以获得与每个电影相关的图像

$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
}
$iq=“从'movies`m中选择m.*
右键加入'movie\u images'mi ON mi.movie\u id=m.movie\u id
其中'm.release`>'
. $开始。“'和'm.release`<'”$结束。“'GROUP BY`m.MONIVE_id` ORDER BY`m.views`
描述限制5”;
$res=mysql\u查询($iq);
而($ir=mysql\u fetch\u assoc($res)){
//在这里获取每部电影的图像
}

我认为这个查询对你有帮助。如果表标识符=id(ms.id)

从电影图像mi中选择mi.*
加入mi.movie_id=ms.id上的ms电影
其中ms.release>“$begin.”
女士发布了<'“$end.”
和mi.image_size='thumb'和mi.type='poster'
由ms.views DESC订购限制5

如果您想选择一个匹配的图像,但不在乎是哪一个(这是您当前的查询所做的),您可以加入表并按电影id分组(我假设它在电影中是唯一的,例如主键):


这带来了2个相同的结果,所有的东西都有相同的图像。我猜你每部电影有多个图像?是的,每部电影有多个图像,我还需要
movies
表中的信息。第一个查询得到了什么?您应该在
movie\u images
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
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