PHP - 从MySQL表中获取大型数组的有限块

时间:2009-11-19 08:22:08

标签: php mysql arrays

假设你有一张这样的桌子:

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] $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

谢谢!

3 个答案:

答案 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分组的数组,它只是对该数组进行双循环以获得所需的输出。