我有像这样的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中有一些循环是可能的。关键是我需要用序列号填充空行。有什么想法吗?
答案 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设置。