所以,我今天早些时候使用了这段代码 - 突然间它决定只开始显示查询的第一个结果。我无法弄清楚自那以后我改变了什么,我实际上相信我没有改变任何东西......无论如何......我已经进入数据库并改变了表格,以便所有“升级”符合要求要显示,但仍然只显示一个结果。
$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();}
答案 0 :(得分:0)
您是否错过了将查询结果推进到下一行的某些代码行?当我通过记录集进行循环(与你正在做的事情略有不同但可能没有太大的不同)时,通常会有一个MoveNext或类似的东西 - 我在这里看不到这些。
我不知道您正在使用的这种语言。
...
我无法在您的回复中添加评论,因此我会在此处添加评论。 .... 凉。你真的觉得你知道自己在做什么,比我写的任何东西都要先进!这里也是新的,并没有抓住标签系统,感谢指出这一点,所以我不需要在将来让自己难堪。很高兴你解决了它。我认为如果你把它作为一个子查询包含它,那么Count(*)会起作用
SELECT FIELD1,FIELD2,(SELECT count(*)FROM ...)AS FIELD3
FROM(ETC)
或者如果您只想在记录集结果中使用它的值,请通过查询提前计算它,然后在select语句中将其值作为虚拟/常量字段包含在内。根据查询引擎中的查询计划,这可能会或可能不会更有效。
或者只是等待从记录集中获取Recordcount。
答案 1 :(得分:0)
问题已经解决,虽然我不确定原因,查询字符串末尾的count(*)阻止整个代码正常运行