php - 仅当有多个记录时才选择记录

标签 php mysql sql date

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

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

类(class) 1:地点阿姆斯特丹 日期:2013 年 9 月 1 日 - 2013 年 9 月 3 日 - 2013 年 10 月 2 日

类(class) 2:地点 阿姆斯特丹 日期:2013年10月10日 - 2013年10月11日 - 2013年10月12日

我将日期单独保存在数据库中。现在,当我选择今天及更高日期的日期时,我只能得到类(class) 1 的最后一个日期(类(class) 2 的第一个日期)。这不是我想要的。

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

这是我的查询:

$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 ";

可以做我想做的事吗?

最佳答案

这可能就是您想要的:

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,这将选择所有 locaties 及其所有 locaties_datum大于提供的参数(例如 TODAY)。

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

关于php - 仅当有多个记录时才选择记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18898859/

相关文章:

php - 使用特定ID对mysql进行排名

php - 与号 (&) 处的 XML 错误

mysql - 单行的多个值

MySQL 全文搜索无法正常工作。为什么?

php - 从循环、超文本 url 中获取结果

sql - 解析 r 中的列(或其他语言,如 SQL)

php: DateTime() 和 time() 有不同的时间

php - Doctrine 中的多个 ManyToOne 关系

java - 使用线程发出数据库请求

php - 如何使用 For 循环将数组的数据插入不同的行