【问题标题】:MySQL select members that have more than *column value* records in tableMySQL选择表中超过*列值*记录的成员
【发布时间】:2016-08-11 16:28:29
【问题描述】:

我设置了以下表格:

MEMBERS

_________________________________________________
|memberid  |   firstname  | lastname  | sessions|
_________________________________________________
|1         |   john       | doe       | 1        |  
|2         |  Dave        | Smith     | 2        |
_________________________________________________

BOOKINGS
___________________________________
|id    |memberid  |   date    | time  | group |
___________________________________
|1     |1         |2016-04-19 | 08:00 | 1     |
|2     |2         |2016-04-18 | 13:00 | 4     |
|3     |1         |2016-04-15 | 18:00 | 3     |
_______________________________________________

我想返回本周在 bookings 表中超过 members.sessions 记录的所有成员的名字和姓氏。

我有生成两个日期的 php 代码

$FirstDay = date("Y-m-d", strtotime('上周的星期日'));

$LastDay = date("Y-m-d", strtotime('本周日'));

替换为 where 子句 = '$FirstDay' 和 '$LastDay' 之间的 bookings.date

非常感谢任何帮助!

【问题讨论】:

  • 等一下,也许我误会了,您要检查 members.session 是否超过该会员的预订量?
  • 更新了我的答案,我认为应该可以解决您的问题。

标签: mysql


【解决方案1】:

这应该可以完成工作:

SELECT firstname, lastname, sessions, count(bookings.id) AS sum_bookings
FROM members
JOIN bookings ON bookings.memberid = members.memberid
WHERE date BETWEEN ? AND ?
GROUP BY members.memberid
HAVING sessions > sum_bookings

阅读更多关于BETWEENhere

或使用您的变量:

$query = "SELECT firstname, lastname, sessions, count(bookings.id) AS sum_bookings
FROM members
JOIN bookings ON bookings.memberid = members.memberid
WHERE date BETWEEN '".$FirstDay."' AND '".$LastDay."'
GROUP BY members.memberid
HAVING sessions > sum_bookings";

小心插入这样的变量。它可能使您容易受到 SQL 注入的攻击,最好使用prepared statements

【讨论】:

  • 由于误解,这对我有用,因为我想知道什么时候会话少于行数,所以我将会话 > sum_bookings 更改为会话
  • aaah,是的,我在理解你的第一句话时遇到了一些麻烦;)祝你的项目好运!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-05-04
  • 2019-04-25
  • 2016-08-26
  • 2013-08-28
  • 2015-02-11
  • 2016-10-25
  • 2013-10-28
相关资源
最近更新 更多