您的查詢應該是這樣的:
SELECT GROUP_CONCAT(`name`) AS `brand`,
`type`
FROM goods
WHERE `type` IN ('car', 'bike', 'motor bike')
GROUP BY `type`
如果上述查詢的結果會是這樣的:
name | type
-------------------------------
honda, ferari | car
bianci | bike
hurley, bar | motor bike
並在您的PHP將是這樣的:
$result = array();
while ($row = $stmt->fetch(PDO::FETCH_ASSOC))
{
$result[$row['type']] = $row['brand'];
}
print_r($result);
既然你不能有重複的鍵陣列上,用GROUP BY
到組,組類型的和GROUP_CONCAT
名字成一個字符串,我們可以有接近你想要什麼樣的結果:
array("car" => "honda, ferrari",
"bike" => "bianci",
"motor bike" => "hurley, bar"
);
另一個辦法做到這一點是:
SELECT `name`,
`type`
FROM goods
WHERE `type` IN ('car', 'bike', 'motor bike')
並在您的PHP將是這樣的:
$result = array();
while ($row = $stmt->fetch(PDO::FETCH_ASSOC))
{
$result[$row['type']][] = $row['name'];
}
print_r($result);
使用這種方法,你將不得不類型作爲鍵和一個數組的值與您可以輕鬆讀取所有名稱的foreach
或任何其它迴路:根據您的
array("car" => array("honda", "ferrari"),
"bike" => array("bianci"),
"motor bike" => array("hurley", "bar")
);
在這種情況下的'type'是一列標題。儘管可以更改列標題標籤,但據我所知,不可能具有動態列標題標籤。您可以在php代碼中實現這種外部SQL。 – Kami
你的SQL查詢很好,你可以發佈你的PHP? – mituw16
@Kami我的確在PHP中使用foreach循環,但是我在跳過,可能有辦法在mysql中這樣做。 – iOi