【发布时间】:2012-03-15 23:22:02
【问题描述】:
我正在尝试进行多对多数据库选择,其中我有 事件 和 音乐风格(以及其他)。然而,由于一个事件可以有多种音乐风格,我决定做一个多对多关系模型。
这是我创建的:
SELECT
a.* FROM music_types AS a, events_music_types AS b
WHERE
a.id = b.music_type_id
AND
b.event_id = events.ID
并将其插入我的代码中,现在看起来像这样:
$query =
"SELECT
events.EVENT_NAME, events.start_datetime, events.end_datetime, events.VENUE_LOCATION, events.PARTY_TYPE, events.IMAGE_URL, events.ENTRANCE_PRICE,
venues.VENUE_NAME, venues.BEER_PRICE, venues.WINE_PRICE, SPIRITS_PRICE,
party_types.PARTYTYPE,
a.*
FROM events
INNER JOIN venues
ON events.VENUE_LOCATION = venues.ID
INNER JOIN party_types
ON events.PARTY_TYPE = party_types.ID
INNER JOIN music_styles AS a, events_music_styles AS b
WHERE start_datetime >= '$DATE_START_SELECTED'
AND end_datetime < '$DATE_END_SELECTED'
AND a.id = b.music_style_id
AND b.event_id = events.ID
";
$result = mysql_query($query) or die(mysql_error());
echo "<table border='1'>
<tr>
<th> Poster </th>
<th> Event Name </th>
<th> Venue Name </th>
<th> Party Type </th>
<th> Entrance Price </th>
<th> Music </th>
<th> € of Beer </th>
<th> € of Wine </th>
<th> € of Spirits </th>
</tr>";
while($row = mysql_fetch_array($result, MYSQL_ASSOC)){
echo "<tr>";
echo "<td><IMG src='" . $row['IMAGE_URL'] . "'></td>";
echo "<td>" . $row['EVENT_NAME'] . "</td>";
echo "<td>" . $row['VENUE_NAME'] . "</td>";
echo "<td>" . $row['PARTYTYPE'] . "</td>";
echo "<td>" . $row['ENTRANCE_PRICE'] . "</td>";
echo "<td>" . $row['MUSIC_STYLE_NAME'] . "</td>";
echo "<td>" . $row['BEER_PRICE'] . "</td>";
echo "<td>" . $row['WINE_PRICE'] . "</td>";
echo "<td>" . $row['SPIRITS_PRICE'] . "</td>";
echo "</tr>";
}
但是,虽然代码确实获取了一个事件的所有音乐风格,但它并没有将它放在一行中,而是将每一行的音乐风格复制到该行的次数。
我将如何将它组合成一行并用逗号分隔音乐风格?谢谢:)!
【问题讨论】:
-
如果您告诉我们您希望在该列中获得什么结果,我们可以确定如何获得它。
-
结果是当有多种音乐风格时,行不会分裂。在这种情况下,Music Column 应该只有一行是“Partymix, rap”。
标签: mysql group-concat