-1

現在、テーブルに次のようなデータがあります。

id  |  type
------------
1   |  1
2   |  1
3   |  2
4   |  2
5   |  3
6   |  3
6   |  3

次のようなデータを表示する必要があります。

Type 1
--All type ones go here
Type 2
-- All type twos go here
Type 3
All type threes go here

私が現在行っている方法は、2 つの別個の SQL ステートメントとループを使用することです。

select distinct type as type from table
while()
{
 select type from table where type = type;
 while()
 {

 }
}

これを実行して必要な結果を得るためのより良い方法はありますか、それとも 2 つのループを使用する唯一の方法ですか?

4

3 に答える 3

3
  1. を使用するようにクエリを変更しますORDER BY type ASC
  2. 結果をループし、キーがタイプで値が ID である連想配列を作成します。

これで、ループが 1 つだけになり、ID は連想配列からその型でアクセスできます。キーで配列をループして、そのキーのすべての ID を表示するのは簡単です。

于 2013-05-15T06:11:17.673 に答える
1

GROUP_CONCAT()で使用GROUP BY:

SELECT
    `type`,
    GROUP_CONCAT(`id` SEPARATOR ',') as `ids`
FROM
    `table`
GROUP BY
    `type`
ORDER BY
    `type`;

各サイクルの反復では、次のように d に$row['ids']なる可能性があります。explode()

<?php

while($row = $result->fetch_assoc()){
    $ids = explode(',', $row['ids']);

    echo 'Type ', $row['type'], PHP_EOL;

    if(empty($ids))continue;

    foreach($ids as $id){
        echo $id, ' ';
    }

    echo PHP_EOL;
}

?>
于 2013-05-15T06:11:19.443 に答える