如何使用GROUP_CONCAT MySQL使用PHP循环行
我是triyng,负责循环来自不同类别的产品,如下所示:如何使用GROUP_CONCAT MySQL使用PHP循环行,php,mysql,Php,Mysql,我是triyng,负责循环来自不同类别的产品,如下所示: $sql = query("SELECT c.name AS 'cat_name', c.image AS 'image', GROUP_CONCAT(DISTINCT p.title ORDER BY p.title DESC SEPARATOR ' ') AS 'product_name' FROM products p INNER
$sql = query("SELECT c.name AS 'cat_name', c.image AS 'image',
GROUP_CONCAT(DISTINCT p.title ORDER BY p.title DESC SEPARATOR ' ') AS 'product_name'
FROM products p
INNER JOIN categories c
ON p.category_id = c.id
GROUP BY p.category_id");
confirm($sql);
while($category = mysqli_fetch_array($sql)) {
$content = <<<DELIMITER
<li class="col-md-3 col-sm-6">
<ul>
<li class="dropdown-header">{$category['cat_name']}</li>
<li><a title="Title" href="#">{$category['product_name']}</a></li>
</ul>
</li>
DELIMITER;
echo $content;
}
$sql=query(“选择c.name作为‘cat_name’,选择c.image作为‘image’,
组_CONCAT(由p.title DESC分隔符“”区分的p.title顺序)为“产品名称”
来自产品p
内连接类别c
在p.category_id=c.id上
按p.category_id)分组;
确认($sql);
而($category=mysqli\u fetch\u数组($sql)){
$content=函数GROUP_CONCAT
为每个类别仅提供一行响应。它将在一个类别中连接所有具有相同类别的行
你有两种可能:
使用GROUP\u CONCAT
:每行将包含您的类别,并将您的所有产品连接在一起。然后您应该拆分“产品名称列表”的连接以正确显示它们
不要使用GROUP\u CONCAT
:按类别名称对结果进行分组。在循环中,检查类别名称何时更改,然后相应地更改html
编辑:
变量$category['product\u name']
包含由函数GROUP\u CONCAT
使用分隔符空格连接的产品名称。
如果你写信
echo $category['product_name']
它会打印出来
Product 1 Product 2...
您可以使用split()
(过时)或分隔产品名称。然后,您需要迭代数组explode()
返回以获取每个产品
但是如果您的产品名称中包含空格,使用GROUP\u CONCAT
以空格作为分隔符,并使用空格作为分隔符拆分,您将获得太多的结果。我建议您使用另一个不能在产品名称中使用的分隔符。您可以使用此分隔符:
SELECT DISTINCT c.name cat_name
, c.image
, p.title product_name
FROM products p
JOIN categories c
ON p.category_id = c.id;
嗯,所以不要使用GROUP_CONCAT…GROUP BYHi,谢谢你的回答。不幸的是,你的建议显示了两倍的类别名称嗨,谢谢你的回答。我不太理解第1点:那么你应该拆分“产品名称列表”的串联正确显示。您的确切意思是什么?查询的product\u name
字段将包含由空格连接的产品名称。如果按连接字符拆分字符串,您将获得一组元素。(请注意,如果您的产品名称中使用空格,您将获得更多的产品,因此您应该选择适当的连接字符,如管道|
或其他。是的,但产品始终以水平而不是垂直的形式显示为列表。我不知道如何将它们作为列表(垂直)循环显示。)@Robertexplode
会起作用。只需将GROUP_CONCAT
的分隔符从''
更改为产品名称中永远不会出现的分隔符(如;
?),然后在while循环中对产品名称进行分解,并在生成的数组中循环