PHP MySQL从多个表中获取数据

时间:2009-06-02 13:01:51

标签: php mysql

昨天我问了一个类似的问题,这个问题可能措辞不好,无论是我不理解的方式,这都是我真正需要解决的问题:)我以前从未这样做过,对于这么多人来说非常有用我的项目。

这是一个目录网站。我有三个表:条目位置条目位置条目包含有关建筑物的信息,例如姓名,地址,图片等。位置只是每个建筑物可能位置的列表。位置表与此示例几乎无关,它只包含有关我可以在网站其他区域显示的位置的信息。

条目位置是一个将条目链接到位置的表格。它只有两个字段, entry-id location ...如果你想知道为什么我需要一个单独的表,因为同一个建筑物可以有多个位置(不要问)。

基本上,我需要做的是从它自己的页面的每个位置显示列表。例如,我需要列出法国的每个建筑物,因此查询需要通过入口位置表返回每个记录位置为“法国”的记录,然后需要从中取出所有数据与 entry-id 对应的条目表已返回。

我确信有一种方法可以通过一个查询来完成此操作,如果我可以展示如何,我可以在很多项目中复制它,这将非常有用。

4 个答案:

答案 0 :(得分:5)

这个怎么样?

-- // Selects all the columns from both entry-locations and entry
SELECT * 
FROM entry-locations
JOIN entry e ON e.id = el.entry-id
WHERE el.location = 'France';

-- // To just get the entry data for matching records: (Remove DISTINCT if you
-- // don't mind, or want, each entry with multiple locations in the result set
-- // multiple times)
SELECT DISTINCT e.* 
FROM entry-locations el
JOIN entry e ON e.id = el.entry-id
WHERE el.location = 'France'

编辑: 好的,所以我尝试删除位置表,而是使用entry-location.location作为位置的名称..这是正确的吗?

答案 1 :(得分:2)

想象一下你有这些数据:

<强>条目

|id|name|
| 1|Foo |
| 2|Bar |

<强>条目位置

|entry-id|location|
|1       |France  |
|2       |Greece  |
|2       |France  |

这就是我理解您描述中的表格的方式。

是一种更常见的方法
Entry(id,name)
Location(id,name)
Entry_Location(entry_id, location_id)

我认为这也是其他帖子中一些混淆的根源。

现在,要求MySql从两个表中获取数据,其中id匹配。

SELECT entry.* 
FROM `entry`, `entry-location` as el
WHERE entry.id = el.`entry-id`
AND el.location = 'France';

MySql现在将您的数据视为一个表,如下所示:

|entry.id|entry.name|el.location|
|       1|       Foo|     France|
|       1|       Foo|     Greece|
|       2|       Bar|     France|

然后从该表中选择el.location = 'France'的条目,并返回指定的字段。

此查询从entry表中提取符合您设置要求的所有字段。 首先,它使得MySql将这两个表视为一个表,SELECT来自两个表。

查看MySql的SELECT reference

答案 2 :(得分:0)

从id中的条目中选择*(从入口位置选择entry-id)

答案 3 :(得分:0)

如果我有了你的想法,你需要: 选择e。* frmm条目连接入口位置,如l ON.entry-id = e.id WHERE l.location ='France'