我有一个产品数据库,每个产品都有一个或多个标签。例如,我的查询结果是:
//Query results
product_id tag
12345 Kitchen
12345 Mixer
12345 Baking
如何显示给定产品的所有标签,并仅列出产品一次,以便我的输出如下:
Product ID: 12345
Tags: Kitchen Mixer Baking
目前,我正在使用fetch_assoc()
并循环显示所有内容的行。实现这一目标的最佳方法是什么?
以下是我目前的代码:
$sql = <<<SQL
SELECT p.product_id, t.tag
FROM products p
JOIN tags t
ON p.product_id = t.product_id
WHERE p.product_id='12345'
SQL;
$db = new mysqli('localhost', 'user', 'password', 'dbname');
if($db->connect_errno > 0){
die('Unable to connect to database [' . $db->connect_error . ']');
}
if(!$result = $db->query($sql)){
die('There was an error running the query [' . $db->error . ']');
}
while($row = $result->fetch_assoc()){
echo $row['product_id'] . '<br>';
echo $row['tag'] . '<br>';
}
答案 0 :(得分:1)
使用GROUP_CONCAT()
功能:
SELECT p.product_id, GROUP_CONCAT(t.tag)
FROM products p
JOIN tags t
ON p.product_id = t.product_id
WHERE p.product_id='12345'
GROUP BY p.product_id