假设你有一张这样的桌子:
ID Cat1 Cat2
1 a red
2 b red
3 c blue
4 d blue
5 e blue
6 f green
etc etc etc
目标是显示ID和Cat1(唯一对),根据Cat2分组。最简单的方法是为每个Cat2运行一个单独的MySQL查询,但是有很多不同的Cat2值会产生一个数量级的查询,以便向查看器显示一个页面,而不仅仅是在一个查询中获取大量数据,用PHP将它分开。
我的格式已经完成了。但是我很难弄清楚如何根据使用了$value[2]
{1}}后从$value = mysql_fetch_row($result)
获取的数组$sql = "SELECT ID,Cat1,Cat2 FROM MyTable ORDER BY Cat2,ID"
中的第三列值来限制行输出p>
用简单的英语(显然不是真正的代码)看起来像:
$result = mysql_query($sql);
IF ($value[2] from $value = mysql_fetch_row($result) = "red")
{
echo "Red Group";
WHILE ()
{
echo $value[0] and $value[1] for all the rows where Cat2 = red
}
}
IF ($value[2] from $value = mysql_fetch_row($result) = "blue")
{
echo "Blue Group";
WHILE ()
{
echo $value[0] and $value[1] for all the rows where Cat2 = blue
}
}
etc
这一切都有意义吗?你如何从$result
数组中获取这些数据组?
显然是不是都有意义! : - ) 以下是所需输出的示例:
RED GROUP
1 a
2 b
BLUE GROUP
3 c
4 d
5 e
GREEN GROUP
6 f
etc
谢谢!
答案 0 :(得分:3)
我不知道我是否理解你,但这会解决你的问题吗?
基本思想是循环遍历所有行并始终保存Cat2的最后一个值。每当您检测到Cat2发生变化时,您都可以插入新Cat2的“标题”。因为您首先根据Cat2对结果进行排序,所以这将创建您想要的输出。
$query = "SELECT ID,Cat1,Cat2 FROM MyTable ORDER BY Cat2,ID"
$result = mysql_query($query);
$last = "";
while ($line = mysql_fetch_row($result)) {
if ($line[2] != $last) {
echo $line[2] . ' Group';
$last = $line[2];
}
echo $line[0] . ' ' . $line[1];
}
答案 1 :(得分:0)
您要做的只是使用SQL的更容易:WHERE
语句限制数据库返回的行。
$sql = "SELECT ID,Cat1,Cat2 FROM MyTable ORDER BY Cat2,ID";
$result = mysql_query($sql, $link) or die('Error');
$last_group = '';
echo '<table>';
while (list($id, $cat1, $cat2) = mysql_fetch_row($result))
{
if ($cat2 != $last_group)
{
echo '<tr><td colspan="2">'.$cat2.' group</td></tr>';
}
echo '<tr><td>'.$id.'</td><td>'.$cat1.'</td></tr>';
$last_group = $cat2;
}
echo '</table>';
答案 2 :(得分:0)
我会说,可能会这样做
$result = array();
foreach($data as $row){
if(isset($result[$row['Cat2']])){
$result[$row['Cat2']][] = $row;
} else {
$result[$row['Cat2']] = array( $row );
}
}
它会给出一个按Cat2
分组的数组,它只是对该数组进行双循环以获得所需的输出。