【问题标题】:PHP Query within a while fetch loop在一个while fetch循环中进行PHP查询
【发布时间】:2017-06-01 05:39:01
【问题描述】:

我想知道是否可以在用于显示 SQL 表内容的 while 循环内运行查询。

如果我不够清楚,这里是代码:

$sql="SELECT * FROM hotels WHERE rooms>0";
                        $req=$db->query($sql);

                        while($row=$req->fetch()){
                           //The second query to check how many place is left
                            $req2=$db->query('SELECT COUNT(*) FROM people WHERE idhotels='.$row["idhotels"].';');
                            echo "hey".$req2;
                            $left_rooms= $row["rooms"] -$req2;
                            echo '<option value="'.$row["idhotels"].'">'.$row["name_hotel"].' ('.$left_rooms.' rooms left)</option>';

                        }

我在这里尝试做的是显示剩余房间数的酒店列表。问题是我必须在显示剩余房间数之前计算占用了多少房间,因此是第二个请求。

我的代码显然不起作用,但我不知道为什么。 有人可以帮我吗?

非常感谢!

【问题讨论】:

  • 你应该向我们展示两个表格数据

标签: php mysql sql pdo while-loop


【解决方案1】:

为什么不使用 join 和 group by 这样你只有一个查询?

$sql="SELECT h.idhotels,h.name_hotel,count(*) FROM hotels h inner join people p on h.idhotels = p.idhotels WHERE h.rooms>0 group by h.idhotels,h.name";
while($row=$req->fetch()){
    // Here do whatever you want with each row
}

【讨论】:

  • 有效!我不习惯 JOIN 请求,但我想我有时必须尝试一下,谢谢!
  • 欢迎您。是的,你必须。它会节省您的时间和性能
【解决方案2】:

您是否尝试使用以下连接查询来计算数据库中的剩余房间数:

SELECT rooms - COUNT(*) AS left_rooms FROM hotels h WHERE rooms &gt; 0 JOIN people p ON (p.idhotels = h.idhotels) GROUP BY h.idhotels, h.name ORDER BY left_rooms ASC;

【讨论】:

    猜你喜欢
    • 2012-09-05
    • 2023-03-30
    • 1970-01-01
    • 2013-03-11
    • 2013-11-23
    • 1970-01-01
    • 2018-12-14
    • 2014-07-24
    • 1970-01-01
    相关资源
    最近更新 更多