繁体   English   中英

While循环仅显示第一个结果

[英]While loop only displaying first result

因此,我让此代码在今天早些时候开始工作-突然,它决定只开始显示查询的第一个结果。 我无法弄清楚自那时以来发生了什么变化,我实际上认为我什么也没有改变...无论如何...我进入数据库并更改了表,以便所有“升级”都符合要求要显示,但仍然只显示一个结果。

        $sql = "SELECT id, name, cost, count(*) FROM upgrades 
            WHERE id NOT IN (Select upgrade_id  FROM thehave8_site1.user_upgrades WHERE uid = :uid)
            AND nullif NOT IN(SELECT upgrade_id FROM thehave8_site1.user_upgrades WHERE uid = :uid2)
            AND prereq IN (SELECT upgrade_id FROM thehave8_site1.user_upgrades WHERE uid = :uid3)
            ;";
    $que = $this->db->prepare($sql);
    #$que->bindParam(':id', $id); //note the : before id
    #$que->bindParam(':id2', $id);
    $que->bindParam(':uid', $this->uid);
    $que->bindParam(':uid2', $this->uid);
    $que->bindParam(':uid3', $this->uid);
    try { 
        $que->execute();
        while($row = $que->fetch(PDO::FETCH_BOTH))
        {

                echo "<div class='upgrade' id={$row[0]}><p>{$row[1]}</p><p>{$row[2]}</p></div>";

        }
    } catch(PDOException $e) { echo $e->getMessage();}

您是否错过了一些将查询结果前进到下一行的代码行? 当我遍历记录集时(与您所做的工作稍有不同,但可能没有太大不同),通常会出现一个MoveNext或类似的东西-我在这里看不到任何类似的东西。

我不知道您使用的是哪种语言。

......

我不允许在您的回复中添加评论,所以我将在此处添加评论。 您真的看起来好像知道自己在做什么,比我写的任何东西都要先进! 这里也很新,也没有赶上标签系统,感谢您指出来,这样我以后就不必为难了。 很高兴您已经解决了。 我认为,如果您将Count(*)包含为子查询,它将起作用

SELECT FIELD1,FIELD2,(SELECT count(*)FROM ...)AS FIELD3

从(ETC)

或者,如果您只想在记录集结果中使用它的值,则可以通过查询提前对其进行计算,然后在您的select语句中将其值作为虚拟/常量字段包含在内。 根据查询引擎中的查询计划,这可能会或可能不会更有效率。

或者只是等待从记录集中获取Recordcount。

问题已解决,尽管我不确定确切原因,但查询字符串末尾的count(*)阻止了整个代码正常运行

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM