如何在数据库表中间启动并循环?

时间:2015-12-16 04:42:58

标签: php mysql mysqli

我有一个包含4列(id,title,image,text)的数据库表。共有120行,我想循环遍历所有行。我知道我可以这样做(使用MySQLi):

$resultSet = $db->query("SELECT * FROM Table");

        if ($resultSet->num_rows != 0)
        {
             while ($rows = $resultSet->fetch_assoc())
             {
                   //Do something
             }
        }

但我要做的是:在三列中显示信息,例如:

1            3         5 
[Title]   [title]   [title] 
[image]   [image]   [image] 
[text]    [text]    [text]

2            4         6 
[Title]   [title]   [title] 
[image]   [image]   [image] 
[text]    [text]    [text]

ID仅供参考,不会显示。我想要3列,每列包含40行。我试图解决的问题是,当第一列完成显示数据库表中的前40行时,如何返回到顶部以便第二列和第三列彼此相邻创建?我是否需要3个循环,每个循环都有自己的div?如果是这样,我将如何完成3个循环,每个循环遍历40行?

3 个答案:

答案 0 :(得分:1)

无需循环回来。在这个变量中保存每40行

if ($resultSet->num_rows != 0)
{
    $count = 40;
    $ctr = 1;
    $index = 0;
    $cols = array();
    while ($rows = $resultSet->fetch_assoc())
    {        
        if($ctr <= $count){
            $cols[$index] = $rows;
        }
        if($ctr >= $count){
            $count += 40; 
            $index++;
        }        
        $ctr++;
    }
    print_r($cols);
}

答案 1 :(得分:0)

if ($resultSet->num_rows != 0)
{
   ?>
   <table>
      <tr>
      <?php
      $i = 0;

      while ($rows = $resultSet->fetch_assoc())
      {
        $i++;
        ?>
        <td>
          <table>
            <tr>
              <td>image</td>
            </tr>
            <tr>
              <td>title</td>
            </tr>
            <tr>
              <td>price</td>
            </tr>
          </table>
        </td>
        <?php 
        if($i == 3)
        {
          $i = 0;
          echo "</tr>";
          echo "<tr>";
        }
      }
      ?>
      </tr>
      </table>
      <?php
  }
?>

答案 2 :(得分:0)

如果您没有太多(数千)行要显示,您可以执行以下操作:

SELECT * FROM table ORDER BY ORDER BY IF(id % 2, id - 100000, id);

这假设您的身份证不超过100000,如果确实如此,则使该常数更大。

我们的想法是,我们提出了一个函数,在相互比较时保留奇数的顺序,对偶数相同,但总是使奇数胜过(大于),因此将其放在后面命令。如果您需要不同的订单,可以使用IF()来使其正确。