0

为了更好地解释我的情况,请看一下这个 mokeup 查询结果:

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 回答