Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/70.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 SQL在中仅选择ID中的1行_Php_Mysql_Sql - Fatal编程技术网

Php SQL在中仅选择ID中的1行

Php SQL在中仅选择ID中的1行,php,mysql,sql,Php,Mysql,Sql,如何在sql请求中为每个ID仅获取一张照片 我的画廊桌子: +----+----------+ | id | name | +----+----------+ | 1 | gallery1 | | 2 | gallery2 | | 3 | gallery3 | +----+----------+ 和照片表: +----+------------+------------+ | id | name | gallery_id | +----+------------+--

如何在sql请求中为每个ID仅获取一张照片

我的画廊桌子:

+----+----------+
| id | name     |
+----+----------+
| 1  | gallery1 |
| 2  | gallery2 |
| 3  | gallery3 |
+----+----------+
和照片表:

+----+------------+------------+
| id |    name    | gallery_id |
+----+------------+------------+
|  1 | photo1.jpg |      1     |
|  2 | photo2.jpg |      1     |
|  3 | photo3.jpg |      2     |
|  4 | photo4.jpg |      3     |
|  5 | photo5.jpg |      3     |
|  6 | photo6.jpg |      3     |
+----+------------+------------+
我使用MySQL 我从gallery sql中选择了我的图库,然后我想从photos sql中为每一行获取一张照片。你能帮我怎么做吗

foreach($this->gallery as $val){
        $this->arr_id = $this->arr_id.$val['id'].',';
      }
      $this->arr_id = trim($this->arr_id, ',');
      echo $this->arr_id; (4,3,2,1)

您需要使用一些聚合函数和group by按类别过滤单个照片,如下所示:

SELECT min(id) as photo_id FROM photos GROUP BY gallery_id
现在,您可以利用此信息为每个图库获取一张照片:

SELECT 
    *
FROM
    photos
WHERE
    id IN (SELECT 
            MIN(id) AS photo_id
        FROM
            photos
        GROUP BY gallery_id)
您也可以使用
JOIN
而不是
WHERE IN

SELECT 
    *
FROM
    photos
        JOIN
    (SELECT 
        MIN(id) AS photo_id
    FROM
        photos
    GROUP BY gallery_id) single ON (photos.id = single.photo_id)
如果还需要库名,
将上面的
表也连接起来:

SELECT 
    *
FROM
    photos
        JOIN
    gallery ON (photos.gallery_id = gallery.id)
        JOIN
    (SELECT 
        MIN(id) AS photo_id
    FROM
        photos
    GROUP BY gallery_id) single ON (photos.id = single.photo_id)
随机照片

SELECT *
FROM gallery G
INNER JOIN 
    (
        SELECT id AS photo_id, gallery_id  
        FROM photos
        ORDER BY RAND()
        LIMIT 1
    ) p ON G.id = p.gallery_id
第一张照片:

SELECT *
FROM gallery G
INNER JOIN 
    (
        SELECT MIN(id) AS photo_id, gallery_id  
        FROM photos
        GROUP BY gallery_id
    ) p ON G.id = p.gallery_id
最后一张照片:

SELECT *
FROM gallery G
INNER JOIN 
    (
        SELECT MAX(id) AS photo_id, gallery_id  
        FROM photos
        GROUP BY gallery_id
    ) p ON G.id = p.gallery_id  

你想要什么还不清楚,请解释清楚。是否要为每个库仅选择一张照片,或其他内容?展示你现有的照片是的,我只想为每个画廊拍一张照片如果有多个潜在的候选人,那么你的标准是什么来决定在输出中要哪一张?哪一张。一个????第一个仅返回一张照片用于一个图库@草莓
LIMIT 1
不是吗?我想OP希望每个画廊有一张照片——就像你的其他查询一样。