基于PHP中的顺序循环的mysql查询

时间:2012-03-13 07:17:13

标签: php mysql loops

我有像这样的MySQL查询

SELECT id,seq,text FROM table ORDER BY seq ASC;

ID | SEQ |的文本
_ __ _ ____
1 | 1 |一个
2 | 4 | 4个
3 | 6 | 6

但我需要像这样完成表格

ID | SEQ |的文本
_ __ _ ____
1 | 1 |一个
| 2 |
| 3 |
2 | 4 | 4个
| 5 |
3 | 6 | 6

我可以通过多个查询来完成,但这很糟糕。我认为在PHP中有一些循环是可能的。关键是我需要用序列号填充空行。有什么想法吗?

4 个答案:

答案 0 :(得分:0)

从Db

中检索最大序列号
$query = SELECT max(seq) as max FROM table;
$result = mysql_query();
$row = mysql_fetch_array($result);
$max = $row['max'];

然后尝试循环

"SELECT id,seq,text FROM table ORDER BY seq ASC";
for( loop for $seq)
{
   for($i=0;$i<$max;$i++)
   {
      if($i == $seq)
      {
         /put your display logic for 1 1 one,2 4 four, 3 6 six
      }
      else
      {
         //blank row
      }
   }
}

以上是您答案的蓝图。我希望你能理解。

更新: 从此查询中获取记录

$query2 = "SELECT id,seq,text FROM table ORDER BY seq ASC";
$result2 = mysql_query($query2);
$row2 = mysql_fetch_array($result2);
for($j=0;$j<mysql_num_rows($row2);$j)

我在这里解释了我的意思     for($ seq循环)

答案 1 :(得分:0)

据我所知,您正在尝试选择表中没有的数据,对我来说,最好的选择是使用存储过程来“创建”您的输出。

我认为可以创建一个返回此数据的SQL语句,但使用函数效率不高。

答案 2 :(得分:0)

$data = getDataAsAnArray();
$newData = array();

for ( $i = 0; $i < count( $data ) - 1; $i++ )
{
    $newData[] = $data[ $i ];
    for ( $j = $data[ $i ][ "SEQ" ] + 1; $j < $data[ $i + 1 ][ "SEQ" ]; $j++ )
    {
        $newData[] = array( "ID" => "", "SEQ" => $j, "text" => "" );
    }
}

$newData[] = $data[ $i ];

答案 3 :(得分:0)

首先,您需要创建一个包含所有数字的临时表:

CREATE TEMPORARY TABLE Numbers ( ID int NOT NULL );

然后填充数字,例如:1到100:

DECLARE idx INT DEFAULT 100;
WHILE idx > 0 DO
  INSERT Numbers VALUES (idx);
  SET idx = idx - 1;
END WHILE;

之后,您可以创建如下查询:

SELECT * FROM Numbers
JOIN table on Numbers.ID = table.SEQ

别忘了放弃桌子:

DROP TEMPORARY TABLE Numbers

哦,你把所有这些都包装成了一个存储过程。

注意:这只是一个模型。它可能有语法错误。目前我没有mysql设置。