【问题标题】:mysql query based on sequenced loop in PHP基于 PHP 中序列循环的 mysql 查询
【发布时间】:2012-03-13 07:17:12
【问题描述】:

我有一个这样的 MySQL 查询

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

ID | 序列 | 文字
________
1  | 1     |一个
2  | 4     |四
3  | 6     |六个

但我需要完成这样的表格

ID | 序列 | 文字
________
1  | 1     |一个
| 2     |
| 3     |
2  | 4     |四
| 5     |
3  | 6     |六个

我可以通过多个查询来做到这一点,但这太恶心了。我认为PHP中的一些循环是可能的。关键是我需要用序列号填充空行。有什么想法吗?

【问题讨论】:

  • 你的问题对我来说还没有多大意义。你能再解释一下第二个输出表吗?
  • 查询一次,保存结果。然后使用常规 for 循环遍历数字,并在循环内检查是否有任何行的 SEQ 匹配。如果他们这样做,请使用它。否则,使用具有该 SEQ 编号的空白替代行。

标签: php mysql loops


【解决方案1】:

从 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 循环)

【讨论】:

  • 你能解释一下这个“for(loop for $seq)”部分吗?
  • 终于明白了!非常感谢!
【解决方案2】:

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

我认为可以创建返回此数据的 SQL 语句,但使用函数会效率低下。

【讨论】:

    【解决方案3】:
    $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 ];
    

    【讨论】:

      【解决方案4】:

      首先,您需要创建一个临时表来保存所有数字:

      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 设置。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-02-15
        • 2015-05-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-10-11
        相关资源
        最近更新 更多