php - 准备好的语句未获取所有结果

标签 php mysql prepared-statement

我有一份准备好的声明,该声明正在存储设施中获取租金,并将其放入列表中,以便在到期时在后端进行跟踪。我遇到的问题是,当报表输出列表时,如果超过一个人的到期日数相同,则列表仅显示其中一位租户。这是我准备好的声明:

SELECT rentals.rental_startdate,
       rentals.rental_renewdate,
       rentals.rental_duedate,
       rentals.rental_latedate, 
       rentals.rental_status,
       rentals.rental_balance,
       units.unit_id,
       units.unit_number,
       units.unit_status,
       users.user_id,
       users.user_fname,
       users.user_lname,
       @var := DATEDIFF(rentals.rental_renewdate,CURRENT_DATE) AS days 
  FROM rentals
 INNER JOIN units ON units.unit_id = rentals.unit_id
 INNER JOIN users ON users.user_id = rentals.user_id
 WHERE rentals.rental_status=? 
 GROUP BY rentals.rental_renewdate HAVING days>=0 AND days<=?
 ORDER BY rentals.rental_renewdate ASC

问题似乎来自 HAVING days>=0 AND days<=? 。这些天数等于在变量中定义为 5 天的通知期。当我把它取下来时,我看到我们的每个人都来了,无论他们的租金是在 5 天还是 10 天内到期,这是我们真正不想要的,但它解决了只看到一个人在 3 天内到期的问题。确实有 2. 是否有任何看起来不合适的地方会导致此问题?我正在使用while($select -> fetch()) {选择行。

最佳答案

您需要将名称数据添加到 GROUP BY 子句中。

按 users.user_fname、users.user_lname、rentals.rental_renewdate 分组

应该可以解决问题

关于php - 准备好的语句未获取所有结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39000370/

相关文章:

php - "flag as spam"功能的数据库结构

php - 使用 Laravel 计算我当前点与 MySQL 中其他点之间的距离

php - MySQL:如何创建在数组索引上使用数组变量执行的查询?

php - 使用准备好的语句检查用户覆盖凭据、用户覆盖权限以及删除 MySQL 表记录

php - 使用 "show"作为字段名称时尝试插入行的语法错误

php - Google Groups Directory API - 将用户添加到组引发错误 - PHP

php - 连接 PHP 数组中的元素

php - 是否可以从 linux 服务器的 php 中调用 C 库中的函数?

mysql - 如何从 Nodejs Mysql 获取 JSON 类型作为 JSON 而不是 String

php - MySQLi 准备好的语句和事务