【问题标题】:PHP and MySQL: Filter results based in dates in second columnPHP 和 MySQL:根据第二列中的日期过滤结果
【发布时间】:2018-04-06 17:43:49
【问题描述】:

我有一张带有 Hotel Rooms 的 MySQL 表。我需要找到未被占用的房间,例如“2018-05-18”或“2018-05-19”

"TABLE ROOMS"
+--------+--------------------------------+----------+-

| IDROOM|             TITLE               | CATEGORY   |

+--------+--------------------------------+----------+-

| 50      | Nice room with cable and wifi | Double Room |

| 51      | Small room with jacuzzy       | Single Room |

| 52      | Small room with balcony       | Triple Room | 

| 53      | Small room with 2 beeds       | Double Room | 

和第二个 MYSQL 表,其中包含房间的 ID 和被占用的日期(每行只有一天......例如 idroom 15,占用时间 2018-04-06,idroom 15,占用日期 2018-04-07等):

"TABLE DATES"

+---------+--------+-------------------------+

|   ID    | IDROOM|             OCCUPIEDDATE  |

+---------+--------+-------------------------+

|    1    |   50   |           2018-04-07    |

|    2    |   50   |           2018-04-08    |

|    2    |   51   |           2018-05-08    |

我有这个 SQL 语句:

SELECT DISTINCT r.idroom FROM rooms r, dates rd WHERE r.category = 2 AND rd.idroom=r.idroom AND rd.occupieddate NOT IN ( '2018-04-07','2018-04-08' )

但它仍然向我显示已占用的结果,例如 50 号房间。

我该怎么办?

【问题讨论】:

  • OCCUPIEDDATE 是日期字段还是字符字段?

标签: php mysql date


【解决方案1】:

您的日期表可能还列出了 50 号房间的日期与这两个日期不匹配。我会扭转它:

SELECT rooms.idroom FROM rooms WHERE category = 2 AND rooms.idroom NOT IN ( SELECT dates.idroom FROM dates WHERE occupieddate IN ('2018-04-07','2018-04-08'));

【讨论】:

  • 你缺少右括号
  • 谢谢@SimonR
  • 我会使用表别名或使用完全量化的列名(如 rooms.idroom),因为 idroom 在两个表中。而且因为内部 SQL 可以访问外部 SQL 列。MySQL 可以选择内部 SQL 的列错误。
  • 很抱歉在这里带来坏消息,但是.....我有点怀疑答案是否会被标记为已解决。
猜你喜欢
  • 2014-11-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-21
  • 2018-09-06
相关资源
最近更新 更多