用mysql_fetch_assoc搞错了吗?

时间:2011-09-24 04:58:14

标签: php mysql

我正在制作一个人们可以发帖的页面。然后所有这些帖子都显示在24个单元格的表格中。我可以将最后24个帖子显示没有问题,但现在我不知道如何显示之前的帖子组。如何修复我的代码呢?我实际上有这个:

(我正在移除线条以便于阅读)

$sql = "SELECT
    topics.topic_id,
    topics.topic_subject
ORDER BY
    topics.topic_id DESC";

//   ---check everything is fine----   //

function retrieve_info($result)
{
 if($row = mysql_fetch_assoc($result))
     {echo $topic_if; echo $topic_subject; //and what I want in every cell
     }
}

<table width="100%" height="751" >
<tr><td><?php retrieve_info($result);?></td>
    <td><?php retrieve_info($result);?></td>
    <td><?php retrieve_info($result);?></td>
    <td><?php retrieve_info($result);?></td></tr>
<!-- repeat a few more times :-) -->
</table>

我虽然通过在if语句之前用数字更改变量$ row会改变输出,但我仍然看到在屏幕上打印相同的数据。我该怎么做才能展示下一组帖子? 感谢!!!

2 个答案:

答案 0 :(得分:0)

function retrieve_info($result)
{
  while($row = mysql_fetch_assoc($result))
  { 
     $topic_id = htmlspecialchars($row['topic_id']);
     $topic_subject = htmlspecialchars($row['topic_subject']);
     echo '<td>';
     echo $topic_if;
     echo $topic_subject; //and what I want in every cell
     echo '</td>';
  }
}

答案 1 :(得分:0)

在某些时候,如果您有数百或数千条记录,您将需要对结果进行分页,而不是仅从表中选择所有记录。

要做到这一点,你将每24条记录运行一个查询,你的sql将更像是这样:

$sql = "SELECT
    topics.topic_id,
    topics.topic_subject
ORDER BY
    topics.topic_id DESC
    LIMIT 0, 24
";

以及接下来的24,

LIMIT 24, 24

然后

LIMIT 48, 24

等等。

然后你可以点击下一个/上一个按钮来刷新页面并显示下一个24,或者你会得到下一个带有AJAX请求的结果,并通过DOM追加下一个24。

这表明必须采用稍微不同的方法,然后从每个表格单元调用相同的函数。

更像是根据您所在的页码获取相关的24个结果,然后遍历结果数组并打印出包含其中值的表格代码。根据循环的迭代器是否可被4整除(看起来你的网格是4x6),你可以打印出新行的新标签,以及那种东西。

在php和mysql中搜索一下分页,以了解这一切是如何组合在一起的。