[英]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.