如何在PHP中将SQL查询结果拆分为块

时间:2013-06-27 01:49:19

标签: php sql pagination

我正在尝试使用PHP将查询结果分解为块但似乎无法弄清楚如何制定查询或循环以将结果分成四个批次并围绕具有特定HTML元素的这四行。< / p>

内容特别是一个摄影作品集,我只是试图逐行显示照片,但我需要设计样式的方式要求每一行基本上是一组独立的信息。

这是我到目前为止使用的代码:

<ul class="no-bullet">
<?php

require("connect.php");
$query = "SELECT * FROM dv_photo_work LIMIT 4";

$result = mysql_query($query, $link);
while ($row = mysql_fetch_array($result)) {
  print('
     <li><img alt="'.$row["img_title"].'" src="'.$row["img_slug"].'></li>');
}


?>
</ul>

我只想要四个图像在该列表中。然后是另一个列表中的另外四个。 你能帮我重新设计一个循环,让它返回四个记录,然后在另一个列表中开始对以下四个记录的新查询吗?数据库中将有大约100条记录,我将检索这个来自,所以它必须能够继续,直到列出整个表。

我想这与分页过程类似,但这是我不熟悉的另一种技巧。我假设它是对查询和标记的简单调整,但是我可以理解它需要比简单修复更多的代码创造力。

非常感谢,

Joshie

4 个答案:

答案 0 :(得分:1)

试试这个

<ul class="no-bullet">
<?php
require("connect.php");
$query = "SELECT * FROM dv_photo_work";
$result = mysql_query($query, $link);
$i =1;
while($row = mysql_fetch_array($result)) {
   print('<li><img alt="'.$row["img_title"].'" src="'.$row["img_slug"].'></li>');
   if ($i%4 == 0) echo "</ul><ul class='no-bullet'>";
   $i++;
}
?>
</ul>

答案 1 :(得分:0)

第一!将该逻辑远离html,这将使您更清楚地看到问题。第二!怎么样的两个类A类代表一个n长度的查询结果列表。 A类应该是一个迭代器,因此B类可以拉取任意长度的结果块并返回适当大小的结果对象。也许有第三类,其实例代表大小约束的结果。所以在所有三个类中,A代表一个完整的结果列表,B作用于并返回C的实例,它们代表你的大小约束结果块。

这本来是一个评论,但它太长了,所以我不得不把它作为一个答案(对不起,如果它也'教一个人钓鱼'我只是不想写php ...)

答案 2 :(得分:0)

获取所有结果,将它们读入多维数组,然后使用array_chunk()将它们拆分为组。

$query = mysql_query("SELECT * FROM dv_photo_work",$link);
$results = array();
while($line = mysql_fetch_array($query, MYSQL_ASSOC)){
    $results[] = $line;
}
$lists = array_chunk($results,4);
foreach ($lists as $list) {
    echo '<ul>';
    foreach ($list as $result) {
        echo '<li><img alt="'.$result["img_title"].'" src="'.$result["img_slug"].'></li>'
    }
    echo '</ul>';
}

答案 3 :(得分:0)

以下是所涉逻辑的概述,使用模数运算符(%)更改每四个记录的HTML:

$i = 0;

// within your current while-loop:
    if ($i % 4 == 0) {
        // $i is a multiple of 4 (including 0, the first record)
        if ($i > 0) {
            // finish the previous ul-tag
        }
        // start a new block of HTML (the ul)
    }
    // output the li
    $i += 1;

// after the loop, close the last ul