首页 > 解决方案 > 根据 id 从同一个 MySql 表中选择

问题描述

我正在构建一个基本的相册页面,它的顶部是 selectec 照片,下面是相册缩略图的其余部分。URL的结构如下:

/photos/photo.php?id=164

表结构包含事件、文件名和 ID 字段

事件字段可以归因于来自同一事件的多个图像。事件字段也可以连接到事件表,它将同一事件下的不同种族聚集在一起。

对于下面的缩略图,对于与 URL 中的 GET 关联的事件,我想选择除了 URL 中 id 所在的照片之外的所有照片。

我相信需要一个内部连接,但我正在努力让它发挥作用。这是我的查询,它可以选择不是正在显示的照片(来自 URL) - 但它不能限制为仅显示与正在显示的图像相同事件的其他照片。

SELECT distinct pg.`filename`, pg.`event`, pg.`id` 
    from photogallery pg 
    INNER JOIN photogallery pg2 on pg.`event` = pg2.`event` 
    WHERE pg.`id` <> 302 and pg.`event` = pg2.`event`

示例数据集:

Filename   ¦¦ Event ¦¦ ID
1983-1.jpg ¦¦ 1983  ¦¦ 1
1983-2.jpg ¦¦ 1983  ¦¦ 2
1983-3.jpg ¦¦ 1983  ¦¦ 3
2001-1.jpg ¦¦ 2001  ¦¦ 4
2001-2.jpg ¦¦ 2001  ¦¦ 5
2001-3.jpg ¦¦ 2001  ¦¦ 6

如果 GET 设置为 1,我希望查询仅显示 ID 2 和 3。但它显示的 ID 为 2、3、4、5、6。

标签: phpmysql

解决方案


您可以通过 equal 上的内部自我加入来做到这一点event。但是您需要过滤id其中一种情况下的搜索结果以及两种情况下的不相等性id

SELECT pg1.filename,
       pg1.event,
       pg1.id
       FROM photogallery pg1
            INNER JOIN photogallery pg2
                       ON pg1.event = pg2.event
       WHERE pg2.id = 1
             AND pg1.id <> pg2.id;

推荐阅读