Php 如何在mysql中选择一些具有特定值的行并对其进行排序

Php 如何在mysql中选择一些具有特定值的行并对其进行排序,php,mysql,sorting,Php,Mysql,Sorting,我有一个MYSQL数据库,其中有一些列和行。 我想选择一些具有相同值的行,对它们求和,然后对它们进行排序 例如: Id data 1 5 2 12 4 42 2 2 1 3 1 8 4 2 比如: 数据:(16个id:1),(数据:14个id:2),(数据:44个id:4) 为此,我尝试了以下代码: $sql = "SELECT id, SUM(data) AS value_sum FROM table GROUP BY id O

我有一个MYSQL数据库,其中有一些列和行。 我想选择一些具有相同值的行,对它们求和,然后对它们进行排序

例如:

Id    data
1     5
2     12 
4     42
2     2
1     3
1     8
4     2
比如: 数据:(16个id:1),(数据:14个id:2),(数据:44个id:4)

为此,我尝试了以下代码:

$sql = "SELECT id, SUM(data) AS value_sum FROM table GROUP BY id ORDER BY value_sum DESC LIMIT 30";
$result = mysqli_query($conn, $sql);

    $ids = "";
    $datas = "";

    if (mysqli_num_rows($result) > 0) {
        while ($row = mysqli_fetch_assoc($result))
        {
            $ids .= $row['p_id'] . '^';
            $datas.= $row['value_sum'] . '^';
        }
    }
它工作正常,我可以得到按
value\u sum
排序的行和值

但是我的问题是ID没有排序,我也想得到排序的ID,但是结果没有排序。 我的意思是,在我不知道的结果中,我可以得到
value\u sum
的真实id吗

有关更多解释,我希望得到以下结果:

(身份证4:44),(身份证1:16),(身份证2:14)

我怎样才能做到这一点?

您可以使用sum()、group by和order by sum和id

select  id, sum(data) , concat('(id ',id, ':', sum(data) , ')')
from my_table  
group by  id   
order by sum(data) desc, id asc

如果你需要在同一行上

select group_concat(my_col) 
from  (
select  id, sum(data) , concat('(id ',id, ':', sum(data) , ')') my_col
from my_table  
group by  id   
order by sum(data) desc, id asc ) t

您可以按任意数量的列按顺序排序,因此我不清楚您所说的“我不知道我是否可以获得值\u sum的真实id”是什么意思。我尝试过这个方法,但id与
value\u sum
I表示id按行排序,而不是按值\u sum排序。您的注释不清楚。。更新您的问题将明确的预期结果添加为表格结果。。(什么意思id是按行排序的,而不是按总和排序的???)我更新了它。我的意思是这部分:IDASC,只按行索引对id排序。但我想要的是带有“sum(data)”结果的排序ID@SCAISedgAnswer更新。。根据你的样本(身份证4:44),(身份证1:16),(身份证2:14)
select group_concat(my_col) 
from  (
select  id, sum(data) , concat('(id ',id, ':', sum(data) , ')') my_col
from my_table  
group by  id   
order by sum(data) desc, id asc ) t