我对MySQL不太熟悉,我正在尝试构建如何构建特定查询。
我很确定我需要在另一个GROUP_CONCAT中使用GROUP_CONCAT,但我无法在这种特定情况下找出正确的语法。
以下是我需要获取值的3个表的简化版本:
====================================
TABLE NAME : models
ModelID ModelName Year
------------------------------------
100 Mazda3 2015
101 Mazda3 2016
====================================
====================================
TABLE NAME : styles
ModelID StyleID Trim
----------------------------
100 200 GS
100 201 GX
100 202 GT
101 300 GS
101 301 GX
101 302 GT
====================================
====================================
TABLE NAME : colors
ModelID StyleID GenericExtColor
--------------------------------------
100 200 Red
100 200 Blue
100 201 Red
100 201 Blue
100 202 Red
100 202 Blue
101 300 Red
101 300 Blue
101 301 Red
101 301 Blue
101 302 Red
101 302 Blue
====================================
我希望输出看起来像(html列表):
Mazda3 2015
----- GS
----------- Red
----------- Blue
----- GX
----------- Red
----------- Blue
----- GT
----------- Red
----------- Blue
Mazda3 2016
----- GS
----------- Red
----------- Blue
----- GX
----------- Red
----------- Blue
----- GT
----------- Red
----------- Blue
这是我目前使用的查询(只有2个级别(模型/修剪),因为我不知道如何获得第3层(颜色))
SELECT models.ModelID, models.ModelName, models.ModelYear,
GROUP_CONCAT(styles.Trim) AS trims
FROM models, styles
WHERE
models.ModelName LIKE '%Mazda3%' AND
styles.ModelID = models.ModelID
GROUP BY models.ModelID
我用来渲染查询结果的PHP:
<ul>
while($row = mysql_fetch_assoc($result)) {
$trims = explode(",", $row['trims']);
echo '<li>'.$row['ModelID'].'</li>';
echo '<ul>';
echo '<li>'.$row['ModelName'].'</li>';
echo '<li>'.$row['ModelYear'].'</li>';
echo '<ul>';
foreach ($trims as $trim) {
echo '<li>'.$trim.'</li>';
}
echo '</ul>';
echo '</ul>';
}
</ul>
如果需要,我可以提供更多信息。任何帮助将非常感谢!
谢谢