【问题标题】:sorting a result mysql/php排序结果 mysql/php
【发布时间】:2013-07-17 11:44:49
【问题描述】:

假设我有一个完整的手机列表。 很容易将所有电话打印在无序列表中,例如:

$get_phones = $mysqli->query("
SELECT
    a.id,
    b.phone_id,
    a.phonename AS pname,
    b.modelname AS mname,
FROM phone_brands 
a LEFT OUTER JOIN phone_models b
ON a.id = b.phone_id");

while($phones = $get_phones->fetch_assoc()){
echo $phones['pname'] . $phones['mname'];}

但是如何通过对所有型号和手机进行排序来使列表更具可读性:

苹果手机
3G
3GS
4G

诺基亚
Lumia 1020
Lumia 925
Lumia 520

我的猜测是我应该这样做:

if($phones['pname'] == $phones['pname']{}

但我不知道我是不是很远?任何帮助将不胜感激:)

【问题讨论】:

  • 您需要订购并检查之前的值
  • 为什么不把ORDER BY a.phonename, b.modelname放在第一位?
  • 我需要改进代码,我正在考虑使用类似 foreach 的东西,因此它比仅按顺序订购更有用:P

标签: php mysql list sorting


【解决方案1】:

当然,您可以按 mname 排序查询:

$get_phones = $mysqli->query("
SELECT
    a.id,
    b.phone_id,
    a.phonename AS pname,
    b.modelname AS mname,
FROM phone_brands 
a LEFT OUTER JOIN phone_models b
ON a.id = b.phone_id
ORDER BY mname");

然后在 php 中执行如下操作:

$currentModel = "";

while($phones = $get_phones->fetch_assoc()){
    if($currentModel != $phones['mname']){
        echo $phones['mname'].'<br/>';
        $currentModel = $phones['mname'];
    }
    echo $phones['pname'];
}

【讨论】:

  • 我认为这是我可能正在寻找的一些东西。但是,当我使用您的脚本时,它没有正确排序。什么是 printet 是一个凌乱的列表,当我尝试这段代码时:)
  • 你在 $phones 数组上尝试过 [k]sort() 吗(在我的例子中)? php.net/sortphp.net/ksort
【解决方案2】:

数据库级别的排序要快得多,最后结果是一样的。您可以在 PHP 数组中读取它并对其进行排序。

$get_phones = $mysqli->query("
SELECT
    a.id,
    b.phone_id,
    a.phonename AS pname,
    b.modelname AS mname,
FROM phone_brands 
a LEFT OUTER JOIN phone_models b
ON a.id = b.phone_id
order by pname, mname");

【讨论】:

    【解决方案3】:
    SELECT
        a.id,
        b.phone_id,
        a.phonename AS pname,
        b.modelname AS mname,
    FROM phone_brands AS a 
    LEFT OUTER JOIN phone_models AS b
        ON a.id = b.phone_id
    ORDER BY pname, mname DESC
    

    根据您的问题,这应该可以完成工作?

    [编辑]

    我需要改进代码,我正在考虑使用类似 foreach 的东西,因此它比仅按以下顺序订购更有用:P – Simon Duun

    继续该评论,您仍然可以在查询中使用 order by,但可以执行以下操作:

    $phone_array = array();
    while($phones = $get_phones->fetch_assoc()){
        $phone_array[$phones['pname']] =  $phones['pname'] . $phones['mname'];
    }
    
    ksort($phone_array);
    
    foreach($phone_array as $phone_pname => $phone_value){
        echo $phone_pname . ' -> ' . $phone_value . "\r\n";
    }
    

    【讨论】:

    • 嗯...但是这似乎也得到了结果 unsortet - 不知道发生了什么:/
    猜你喜欢
    • 2016-03-02
    • 2012-03-24
    • 1970-01-01
    • 1970-01-01
    • 2014-12-04
    • 2021-04-06
    • 1970-01-01
    • 2018-03-14
    • 2013-12-18
    相关资源
    最近更新 更多