【问题标题】:Only select records when they have multiple records仅在有多个记录时选择记录
【发布时间】:2023-03-30 01:18:01
【问题描述】:

我想知道是否可以从数据库中选择一些至少有 3 条记录与查询匹配的记录?

例如。我目前有一门课程有 20 个不同的地点,并且都有 3 个日期:

课程 1:地点阿姆斯特丹日期:01-09-2013 - 03-09-2013 - 02-10-2013

课程 2:地点阿姆斯特丹日期:10-10-2013 - 11-10-2013 - 12-10-2013

我将日期分别保存在数据库中。现在,当我选择今天和更高的日期时,我只会得到课程 1 的最后日期(课程 2 的第一个日期)。这不是我想要的。

我希望它检查前两个日期是否也与语句匹配,然后它可以选择第一个日期。所以在这个例子中,我只想选择第二门课程。

这是我的查询:

$query = "SELECT locaties_datum.id, locaties_datum.cursus_id, 
locaties_datum.locatie_id, locaties_datum.van, locaties_datum.code, 
locaties.plaats, locaties.link FROM locaties, locaties_datum WHERE 1 = 1 AND 
locaties_datum.locatie_id = locaties.locatie_id AND 
locaties_datum.van > '". strtotime("now") ."' AND 
locaties.active = '1' AND 
locaties_datum.cursus_id = '9' AND 
locaties.locatie_id = '71' 
GROUP BY locaties_datum.code 
ORDER BY locaties_datum.van ASC ";

有可能做我想做的事吗?

【问题讨论】:

  • 为什么要单独保存日期?这三个日期的目的是什么?这些课程是三天的课程,还是三天的课程,还是同一课程在三个不同的时间举行?
  • 可能是GROUP BY locaties_datum.code引起的
  • @wesley 课程为期三天。

标签: php mysql sql date


【解决方案1】:

这可能就是你想要的:

SELECT d.id, d.cursus_id, d.locatie_id, d.van, d.code, l.plaats, l.link
FROM locaties AS l
INNER JOIN locaties_datum AS d ON d.locatie_id = l.locatie_id
WHERE l.active = '1'
AND d.cursus_id = '9'
AND l.locatie_id = '71'
AND EXISTS (SELECT 1 FROM locaties_datum AS sd WHERE sd.locatie_id = d.locatie_id AND sd.van > ?)
ORDER BY d.van ASC

如果locaties_datum 至少有一行van 大于提供的参数(例如TODAY),这将选择所有locaties 及其所有locaties_datum

附带说明:您应该将日期作为参数传递给查询或使用 sql-server 的内置函数。不要将其插入到查询字符串中。另外,您的intsstrings

【讨论】:

  • 感谢您的回复。当我使用您提供的查询时。我收到错误:You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '?) ORDER BY d.van ASC' 如何将日期传递给查询?
猜你喜欢
  • 1970-01-01
  • 2021-12-13
  • 1970-01-01
  • 2021-08-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多