繁体   English   中英

PHP如何在mysql查询列表中回显每个组的第一个值

[英]PHP how to echo the first value of each group in a mysql query list

为了更好地说明我的情况,请看一下此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。

花了我一段时间

更改

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

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

由于该解决方案看起来像解决了您需要执行的操作,因此不确定您要寻找的是什么,但是如果您想更宽容结果订单,可以尝试以下操作:

$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编码了。 但基本上,您应该先累积项目,然后浏览累积的列表并输出数据。

最好串联相同类别的项目,并将其存储为Item1,Item2,Item3。

当您要使用此项目时,请使用explode()进行拆分和

每当您要在此项目中搜索特定项目时,请使用mysql的FIND-IN-SET

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM