0

私の状況をよりよく説明するために、このモークアップ クエリの結果を見てください。

Category    Item
cat1        Item 1
cat1        Item 2
cat1        Item 3
cat23       Item x
cat23       Item y
cat23       Item z
X           apples
X           oranges
X           bananas
and so on....

私はmysqlデータベースからデータを引き出しており、次のような結果を表示したいと考えています:

Category----Item
cat1        Item 1
            Item 2
            Item 3
cat23       Item x
            Item y
            Item z
X           apples
            oranges
            bananas
and so on....

私はさまざまな方法を試しましたが、空になってしまいました。これは最新の試みです:

PHP

//Headers
echo 'Category';
echo ' | ';
echo 'Item';
echo "\n";

$sql = "SELECT `table1`.*, `table2`.* FROM table1 INNER JOIN table2 ON `table1`.`Category` = `table2`.`Category` ORDER BY `table1`.`Category`, `table2`.`Item`";
$dbq = mysql_query( $sql );
$cat = '';
while( $data = mysql_fetch_assoc( $dbq ) ) {
    if( !$cat == $data['category'] ) {
        $cat = $data['category'];

        echo $cat;
        echo ' | ';
        echo $data['item'];
        echo "\n";
    }
    else {
        echo '     ';
        echo ' | ';
        echo $data['item'];
        echo "\n";
    }
}

このコードでは、現在の出力は次のとおりです。

Category----Item
cat1        Item 1
            Item 2
            Item 3
            Item x
            Item y
            Item z
            apples
            oranges
            bananas

...目的の出力ではなく。

各カテゴリを1回だけエコーする最も効率的で簡単な方法を探しています。おそらく、このコードはそれにアプローチするための最良の方法ではありませんが、さまざまな方法で試してみましたが、今の私の脳は閉じています S_S 。

4

3 に答える 3

1

結構時間かかりました…

変化する

if( !$cat == $data['category'] ) {

if( $cat != $data['category'] ) {
于 2012-12-05T04:14:48.653 に答える
0

そのソリューションは必要なことを解決しているように見えるので、探しているものがわかりませんが、結果の注文に対してより寛容になりたい場合は、これを試すことができます:

$concated_data = array();
while( $data = mysql_fetch_assoc( $dbq ) ) 
{
  if ( ! array_key_exists( $data['category'], $concated_data ) )
    $concated_data[$data['category']] = array();

  array_push($concated_data[$data['category']], $data['item']);
}

foreach ($concated_data as $category => $items) 
{
  echo $category;
  $count = count($items);
  for ($i = 0; $i < $count; $i++)
  {
    if ($i == 0)
      echo "\t";
    else
      echo "\t\t";

    echo $items[$i]."\n"; // Items
  }
}

この時点でフォーマットするのはあなた次第だと思いますが、データを配列の配列に入れるのが最善の方法だと思います。そのため、最上位のキーはカテゴリであり、次にそれらが指す配列はアイテムの配列を保持します。これは、同じカテゴリの結果が連続して得られることも前提とはしていません。

しばらくPHPでコーディングしていないため、申し訳ありませんがコードにバグが含まれている可能性があります。ただし、基本的には、最初にアイテムを蓄積してから、蓄積されたリストを調べてデータを出力する必要があります。

于 2012-12-05T03:53:18.013 に答える
0

同じカテゴリのアイテムを連結して、アイテム 1、アイテム 2、アイテム 3 のように格納することをお勧めします。

このアイテムを使用する場合は、explode() を使用して分割し、

このアイテムで特定のアイテムを検索したいときはいつでも、mysqlのFIND-IN-SETを使用してください

于 2012-12-05T04:05:06.440 に答える