0

いくつかの列を結合してクエリを実行すると、次のような結果が得られます。

id     item     category
1      item 1   A
1      item 1   B
1      item 1   C
2      item 2   A
2      item 2   D
3      item 3   B
3      item 3   E

各行を出力する while ループがあります。

while($results = mysql_fetch_array($raw_results)) {
    echo $results['item'].<br>;
    echo "Category: ".$results['category'];
}

そしてそれはこれを与えています:

<div>
Item 1
Category: A
</div>

<div>
Item 1
Category: B
</div>

などですが、各 ID のすべての値を 1 つのスペースに結合する必要があるため、結果は次のようになります。

<div>
Item 1
Category: A, B, C
</div>

<div>
Item 2
Category: A, D
</div>

<div>
Item 3
Category: B, E
</div>

これを行う最善の方法は何ですか?IDごとに行を含む別の配列を作成し、それをループする必要があります(そして、配列をどのように設定しますか?)または他に何かありますか?

4

5 に答える 5

4

試しGROUP BYてみてくださいGROUP_CONCAT

http://www.mysqlperformanceblog.com/2006/09/04/group_concat-useful-group-by-extension/

于 2013-04-22T23:10:28.907 に答える
1

PHP に依存する代わりに、クエリでこれをすべて行うことができます。

  Select item, group_concat(category) FROM yourtable GROUP BY Item
于 2013-04-22T23:11:01.957 に答える
1

私はこのようなことをします:

select id, item, group_concat(category) from Table1
group by id, item

SQLフィドル

于 2013-04-22T23:12:33.223 に答える
0

各項目のカテゴリの配列を作成します。

while($results = mysql_fetch_array($raw_results)) {
    $items[$results['item']][] = $results['category'];
}

次に、それを使用して HTML を出力します。

foreach ($items as $itemName => $categories) {
    echo $itemName.'<br>';
    echo 'Categories: '.implode(', ',$categories);
}
于 2013-04-22T23:12:30.360 に答える
0

データベースからデータを取得するクエリを変更できない場合は、PHP ヘルパー関数を使用できますarray_unique。この関数は、配列から重複する値を削除します。これは MySQL で実行する方が適切ですが、開発者がこれを簡単に実行できるとは限らないため、これが役立ちます。この関数に関する PHP マニュアルへのリンクは次のとおりです。

http://www.php.net/manual/en/function.array-unique.php

于 2013-04-22T23:13:26.130 に答える