昨天我问了一个类似的问题,这个问题可能措辞不好,无论是我不理解的方式,这都是我真正需要解决的问题:)我以前从未这样做过,对于这么多人来说非常有用我的项目。
这是一个目录网站。我有三个表:条目,位置和条目位置。 条目包含有关建筑物的信息,例如姓名,地址,图片等。位置只是每个建筑物可能位置的列表。位置表与此示例几乎无关,它只包含有关我可以在网站其他区域显示的位置的信息。
条目位置是一个将条目链接到位置的表格。它只有两个字段, entry-id 和 location ...如果你想知道为什么我需要一个单独的表,因为同一个建筑物可以有多个位置(不要问)。
基本上,我需要做的是从它自己的页面的每个位置显示列表。例如,我需要列出法国的每个建筑物,因此查询需要通过入口位置表返回每个记录位置为“法国”的记录,然后需要从中取出所有数据与 entry-id 对应的条目表已返回。
我确信有一种方法可以通过一个查询来完成此操作,如果我可以展示如何,我可以在很多项目中复制它,这将非常有用。
答案 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'