php - 通过或使用 PHP 的 MySQL GROUP?

标签 php mysql group-by

我有一个看起来很简单的问题,但我只想问问你会如何解决它:

在 MySQL 表中有以下结构:

provider     artist      
a            1
a            2
a            3
b            4

现在有必要在 HTML 中回显一个列表,例如:

provider a
1
2
3

provider b
4

我停留在我想对结果进行分组并使用 for-eachwhile 循环回显它们的地方。

主要思想很简单,比如:

<?php $query = mysqli->query("SELECT * FROM `table` GROUP by provider");

foreach GROUP {?>

  echo some styling HTML-code for each group of headline;

  <?php while ($data= $query->fetch_assoc()){?>

  echo some styling HTML-code for each list-item;

<?php};?>

提前致谢。

更新:

感谢您的回答。

RiggsFolly 的解决方案似乎工作正常。 HTML 只是一个小问题。在该行中添加 HTML 代码时,周围有一个 div 标签不会被关闭:

 echo 'provider '. $data->provider;

问题是 while 循环需要在 div 中。每个

都缺少结束 div 标签
if ( $current_provider != $data->provider ) {

这是原始的 HTML 代码:

    <?php
        $service = $db->query("SELECT * FROM `system` ORDER BY provider, artist");
        $current_provider = NULL;

        while ($data = $service->fetch_object()) {
            if ( $current_provider != $data->provider ) {// new provider?>
    <div class="service">
    <p class="lower">
     <?php echo $data->provider;?>
    </p>
    <?php
        $current_provider = $data->provider;
    }?>
    <a href='?artist=<?php echo $data->artist;?>'><?php echo "/".$data->artist;?</a><br/>   
    <?php };?>
</div><!--service -->

列表项会很好地显示。但是在查看源代码时,您会发现缺少结束的 div 标签。谢谢

亲切的问候。

最佳答案

不使用 GROUP BY 似乎更简单,尤其是因为它不会为您提供所需的数据。因此,只需将它们全部选中,然后按提供者排序,也可以像这样将艺术家作为子排序

<?php 
    $result = $mysqli->query("SELECT * FROM `table` ORDER BY provider, artist");

    $current_provider = NULL;

    while ($data = $result->fetch_object()){
        if ( $current_provider != $data->provider ) {
            // new provider
            echo 'provider '. $data->provider;
            $current_provider = $data->provider;
        }
        echo $data->artist;
    }
?>

更新后:

<?php
    $service = $db->query("SELECT * FROM `system` ORDER BY provider, artist");

    $current_provider = NULL;

    while ($data = $service->fetch_object()) {

        if ( $current_provider != $data->provider ) {
            if ( $current_provider !== NULL ) {
                echo '</div>';
            }
            echo '<div class="service">';
            echo '<p class="lower">' . $data->provider . '</p>';
            $current_provider = $data->provider;
        }
        echo '<a href="?artist=' . $data->artist '">' .
             $data->artist . '</a><br/>';   
    }
    echo '</div>';

关于php - 通过或使用 PHP 的 MySQL GROUP?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31492051/

相关文章:

Mysql Left join 旋转90°表

mysql - 多张表,一张,共享结构

MySQL 计算 MAX 时间戳后的结果

sql - 返回所有重复行

php - __PHP_Incomplete_Class_Name 错误

php - Mysql查询,选择join两个表

mysql - PHP Mysql 中 NOT EXISTS 的使用

mysql - 哪里和群冲突了?

php - mysql_real_escape_string() 到底是做什么的?

javascript - 如果背景颜色优于 x 则改变颜色?