while循环只显示第一个结果

时间:2014-04-06 00:15:56

标签: php sql

所以,我今天早些时候使用了这段代码 - 突然间它决定只开始显示查询的第一个结果。我无法弄清楚自那以后我改变了什么,我实际上相信我没有改变任何东西......无论如何......我已经进入数据库并改变了表格,以便所有“升级”符合要求要显示,但仍然只显示一个结果。

        $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();}

2 个答案:

答案 0 :(得分:0)

您是否错过了将查询结果推进到下一行的某些代码行?当我通过记录集进行循环(与你正在做的事情略有不同但可能没有太大的不同)时,通常会有一个MoveNext或类似的东西 - 我在这里看不到这些。

我不知道您正在使用的这种语言。

...

我无法在您的回复中添加评论,因此我会在此处添加评论。 .... 凉。你真的觉得你知道自己在做什么,比我写的任何东西都要先进!这里也是新的,并没有抓住标签系统,感谢指出这一点,所以我不需要在将来让自己难堪。很高兴你解决了它。我认为如果你把它作为一个子查询包含它,那么Count(*)会起作用

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

FROM(ETC)

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

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

答案 1 :(得分:0)

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