【发布时间】:2019-09-16 19:01:43
【问题描述】:
我是 SQL 查询的新手,我正在尝试正确编写一个查询,以显示事件、它的信息以及它所属的类别。
我想要一个如下所示的结果:
标题:乐队对战!
时间:晚上 7:00
地点:帕克兰学校
类别:音乐、学校、公共
在我的示例中,我有一个包含三个类别的事件,但无法正确显示它。我可以让它显示包括一个类别在内的所有信息,或者重复三次显示每个重复列表的一个类别。我还注意到,如果我在两个表中有相同的行,它只会显示它最后加载的那个。有没有办法告诉它要加载哪个行单元格?
过去,我通过多个 SQL 查询成功地做到了这一点,但我知道这是不正确的。我有一个显示所有项目的查询,每次显示时,都会发出另一个查询并获取相关数据,然后再针对该数据进行另一个查询,等等。我会在每次页面加载时运行数百个查询!
我确信这不是最好的方法,所以我正在尝试编写一个查询来处理所有事情。我认为 JOINS 是要走的路,特别是内部连接。
我需要显示的信息分布在几个表中:Events 表,其中包含有关事件的信息,包括将其与 Venues 表和 EventCategories 列表相关联的 ID。
这是我的 SQL 查询:
from
`Events` e
inner join
`EventCategories` c
on e.ID = c.EventID
inner join
`Venues` v
on e.ID = v.ID
在我的 PHP 中,我这样调用每个数据单元格:
$row["Title"] or $row["CategoryID"]
它有效,但有几个问题。我一次只能显示一个类别。另外,如果我调用 $row["image"] 之类的东西,并且我的 Events 和 Venue 表中都有这一行,它会显示错误的行。
我没有收到任何错误消息,但我想我知道问题和解决方案,只是不知道如何编写。
我想我必须说当我放下一个变量时从哪个表调用,比如 $row["v.Title"] 将从 Venue 调用(但它不会)。我还认为我必须采用 $row["Categories"] 之类的变量并将其分解为组件,但我似乎也找不到有关如何执行此操作的任何信息。
任何帮助将不胜感激!
这是我的数据,仅显示相关部分:
EVENT
ID Title Time Image VenueID
20 Band Battle! 7:00pm band.jpg 1
VENUES
ID Address Name Image
1 123 Street Parkland School school.jpg
EVENT_CATEGORIES
ID EventID CategoryID
1 20 54
2 20 12
3 20 84
CATEGORIES
ID Name
12 School
54 Music
84 Public
不重复:Can I concatenate multiple MySQL rows into one field?
这可能不是我的问题的解决方案(尽管它可能是问题的一部分),并且它似乎没有解决如何从另一个数据库中获取多条信息,这是我问题的主要部分。
【问题讨论】: