输出全部减一

Posted

技术标签:

【中文标题】输出全部减一【英文标题】:Outputs all minus one 【发布时间】:2009-07-12 02:54:13 【问题描述】:

我使用此代码输出具有特定论坛 ID 的所有主题

$query = mysql_query("SELECT * FROM forums JOIN threads ON threads.fid = forums.id WHERE     forums.id = ".intval($_GET['forumID']));
$forum = mysql_fetch_assoc($query);

?>

<h1><a>Forums</a> &gt; <?=$forum['name']?></h1>

<?php while ($thread = mysql_fetch_array($query)): ?>

<?=$thread['title']?>

<?php endwhile; ?>

论坛id, name, description

线程id, title, message, fid

事情是它输出除一个以外的所有线程。如果我删除一个,它只会隐藏另一个。这是为什么呢?

非常感谢您的帮助!

对不起,我的英语不太好,假设我在 fid = 的线程中有 4 条记录(在本例中为 1),它只输出其中的 3 条

【问题讨论】:

我会为这个问题添加一个 PHP 标签。您的 SQL 看起来不错。你对你的 PHP 循环语法有多大把握? 【参考方案1】:

您正在使用第 2 行 mysql_fetch_assoc 中返回的第一行。在您的 while 循环条件中,mysql_fetch_array 函数将从 sql 查询的第二行开始,而不是第一行。因此,您的列表中缺少第一行的 id。但是,如果使用列名,还应该使用 mysql_fetch_assoc,而不是 mysql_fetch_array。这不应该给你任何 ID。

【讨论】:

【参考方案2】:

您的线程数比您预期的少一个原因是您正在获取第 2 行中的第一个线程,但仅使用它来显示论坛名称。然后,您在 while 循环中获取第二行并从那里开始列出线程 - 缺少第一行。

我将使用 PHP 中的do..while 控制结构重构您的代码,如下所示:

$query = mysql_query("SELECT * FROM forums JOIN threads ON threads.fid = forums.id WHERE forums.id = ".intval($_GET['forumID']));
$thread = mysql_fetch_assoc($query);

if ($thread != null) 
    echo "<h1><a>Forums</a> &gt; $thread['name'] </h1>";

    do 
        echo $thread['title'];
     while ( $thread = mysql_fetch_array($query)) );

【讨论】:

【参考方案3】:

正如 txwikinger 所指出的,内部数组指针向前移动了mysql_fetch_assoc(),所以第一次使用mysql_fetch_array() 时,你会得到第二行。在第二次使用数组之前,您可以使用mysql_data_seek() 重置数组指针。

 mysql_data_seek($query, 0);

我宁愿重组代码以使用两个查询,一个在一个小查询中获取论坛名称,另一个在另一个查询中获取所有主题。

【讨论】:

以上是关于输出全部减一的主要内容,如果未能解决你的问题,请参考以下文章

用JAVA编一个程序输出全部的英文字母

Pandas如何显示全部数据

将它们全部单独输出到控制台后,如何创建一组项目?

在C#怎么让chackboxlist中一次性输出全部选中的项?

bash的输出多行和vim的全部选择

js中如何输出对象中的全部内容?