我的SQL语句看起来像
SELECT beds.id,beds.name,beds.brand,beds.price,beds.disprice,feature.feature AS feature
FROM beds,feature,bedFeatures
WHERE bedFeatures.featureID = feature.id AND bedFeatures.bedID = beds.id
我得到了这个结果
id name brand price disprice feature
10 Big Sleeper ZZZZ 10000 1 Oak
10 Big Sleeper ZZZZ 10000 1 Ash
10 Big Sleeper ZZZZ 10000 1 White
我想要的是让AS为每个功能提供一个唯一的名称,例如feature1 feature2 feature3,这样就可以将这4行显示在一个中。这可能吗?
我正在寻找的输出看起来像
id name brand price disprice feature1 feature2 feature3
10 Big Sleeper zzzz 1000 1 Oak Ash White
答案 0 :(得分:6)
除了使用GROUP_CONCAT()
将要素列为逗号分隔列表而非单个列之外,您要求的确切输出并不容易实现。
由于您的所有产品都没有一组固定的固定功能,因此您无法使用数据透视查询。
我建议使用GROUP_CONCAT()
将这些功能检索为以逗号分隔的列表,然后在应用层中使用PHP将它们拆分。
SELECT
beds.id,
beds.name,
beds.brand,
beds.price,
beds.disprice,
GROUP_CONCAT(feature) AS features
FROM
beds
JOIN bedFeatures ON beds.id = bedFeatures.bedID
JOIN features ON features.id = bedFeatures.featureID
GROUP BY beds.id, beds.name, beds.brand, beds.price, disprice
输出结果如下:
d name brand price disprice features
10 Big Sleeper zzzz 1000 1 Oak,Ash,White
在PHP中,在获取结果时,将explode()
功能添加到数组中:
$resultset = array();
while ($row = mysql_fetch_assoc($result)) {
// First append the whole row onto the result set as it is...
$resultset[$row['id']] = $row;
// Overwrite the `features` string with an array instead...
$resultset[$row['id']]['features'] = explode(",", $row['features']);
}
最后,访问应用程序中的功能:
foreach ($resultset as $r) {
echo $r['features'][0];
echo $r['features'][1];
echo $r['features'][2];
echo $r['features'][3];
}
答案 1 :(得分:0)
您正在寻找GROUP_CONCAT
。