选择特定的MYSQL行

时间:2014-10-22 02:25:21

标签: php mysql

我有一个页面,假设为数据库中的每9个条目创建一个Div。 每个Div将包含3个UL,每个UL将包含3个LI。 像这样:

Demo

因此,每个LI都显示每个条目,每个Div基本上都是一个唯一的页面。

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

    $sql = mysql_query("SELECT * FROM `reviews`") or die(mysql_error());
    $e_count = mysql_num_rows($sql);
    $r_pages = ceil($e_count / 9);
    $x = 1;
    $y = 1;
    if($e_count > 9){ // if there are more than 9 entries in the database           
        for($x=1;$x<=$r_pages;$x++){ // creates a div for every 9 items in the database 
            echo '<div class="rp_pages" id="rp_page_'.$x.'">';
                for($y=1;$y<=3;$y++){ // creates 3 ULS in each "page" 
                    echo '<ul>';
                       // 3 lis should appear here      
                    echo '</ul>';                       
                }
            echo '</div>';
        }                           
    }

问题是,我不想使用带有LIMIT的多个查询来选择相应的条目。 这可以通过一个查询完成吗?

1 个答案:

答案 0 :(得分:1)

我只看到一个查询(第一个选择)。之后,不是用它来计算行数,而是解析每一行并提取评论文本,这样:

让我们想象reviews表格中有一个text列,其中保存了评论文本。拥有你的代码:

$sql = mysql_query("SELECT * FROM `reviews`") or die(mysql_error());
$e_count = mysql_num_rows($sql);
$r_pages = ceil($e_count / 9);
$x = 1;
$y = 1;
if($e_count > 9){ // if there are more than 9 entries in the database           
    for($x=1;$x<=$r_pages;$x++){ // creates a div for every 9 items in the database 
        echo '<div class="rp_pages" id="rp_page_'.$x.'">';
            for($y=1;$y<=3;$y++){ // creates 3 ULS in each "page" 
                echo '<ul>';

                // Here the code that extract the rows from the query.
                for($z=1;$z<=3;$z++){
                    echo '<li>';
                    if($data = mysql_fetch_array($sql, MYSQL_ASSOC)) {
                        echo $data['text']; // Use some type of parser to show special characters like < or > as text, so you are safe from code injection.
                    }
                    echo '</li>';
                }


                echo '</ul>';                       
            }
        echo '</div>';
    }                           
}

正如您所看到的,它创建了一个新循环来创建3个li,并在每个li提取中查询了text,然后echo个它

正如http://php.net/manual/en/function.mysql-fetch-array.php所说:

  

返回与获取的行对应的数组并移动   前面的内部数据指针。

因此,下次取一行时,它将是下一行。

PD:不推荐使用PHP mysql。请改用mysqli。是相同的,但与另一个目前正在开发的库,不像mysql