Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用GROUP_CONCAT MySQL使用PHP循环行_Php_Mysql - Fatal编程技术网

如何使用GROUP_CONCAT MySQL使用PHP循环行

如何使用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

我是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 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
    字段将包含由空格连接的产品名称。如果按连接字符拆分字符串,您将获得一组元素。(请注意,如果您的产品名称中使用空格,您将获得更多的产品,因此您应该选择适当的连接字符,如管道
    |
    或其他。是的,但产品始终以水平而不是垂直的形式显示为列表。我不知道如何将它们作为列表(垂直)循环显示。)@Robert
    explode
    会起作用。只需将
    GROUP_CONCAT
    的分隔符从
    ''
    更改为产品名称中永远不会出现的分隔符(如
    ?),然后在while循环中对产品名称进行分解,并在生成的数组中循环