0

可以说我有一个完整的电话列表。在无序列表中打印所有电话很容易,例如:

$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']{}

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

4

3 回答 3

0
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";
}
于 2013-07-17T11:59:49.733 回答
0

当然,您可以按 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'];
}
于 2013-07-17T11:52:14.493 回答
0

数据库级别的排序要快得多,最后结果是一样的。您可以在 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");
于 2013-07-17T11:56:35.450 回答