我有这张桌子:
+----+-----------+------------+------------+-----------+
| id | name | date_start | date_end | is_active |
+----+-----------+------------+------------+-----------+
| 12 | Invernale | 2016-11-01 | 2017-03-31 | 1 |
| 15 | Estivo | 2016-09-01 | 2016-09-01 | 1 |
+----+-----------+------------+------------+-----------+
我需要得到"当前"记录基于今天和下一个记录,今天基于。
在我的例子中,"当前"是id 15和" next"将是12。
今天,同样的查询将返回" NULL" (或没有记录)为当前和15为下一个。
2016年11月1日,当前将是12,接下来没有记录。
2017年4月1日,两人都不需要返回记录。
这些是我的查询,但两者都会返回id 15(今天)。
$sql_current = "SELECT * FROM $table WHERE date_start <= '$now' AND date_end >= '$now'";
$sql_next = "SELECT * FROM $table WHERE date_start >= '$now' ORDER BY date_start ASC LIMIT 1";
非常感谢
答案 0 :(得分:0)
我猜你可以在UNION
的帮助下在一个查询中获得这两条记录(如果有的话)(如果我没有误解)
(
SELECT
*
FROM tableName
WHERE CURDATE() BETWEEN date_start AND date_end
LIMIT 1
)
UNION
(
SELECT
*
FROM tableName
WHERE date_start > CURDATE()
ORDER BY date_start
LIMIT 1
);
修改强>
如果您想知道哪个条目是current
,哪个条目是next
,那么您可以添加一个额外的列currentOrNext
,如下所示:
(
SELECT
*,
'current' AS currentOrNext
FROM tableName
WHERE CURDATE() BETWEEN date_start AND date_end
LIMIT 1
)
UNION
(
SELECT
*,
'next' AS currentOrNext
FROM tableName
WHERE date_start > CURDATE()
ORDER BY date_start
LIMIT 1
)
答案 1 :(得分:0)
如果我正确理解了这个问题,您需要获取包含当前日期(CURDATE() BETWEEN date_start AND date_end
)的间隔以及未来的第一个间隔,并且不包含当前日期。
以下查询:
SELECT *
FROM tbl
WHERE CURDATE() <= date_end
ORDER BY date_end ASC
LIMIT 2
产生前两个(或更少)的时间间隔(或更短),以及未来的终止日期。(/ p>
客户端代码中的几行代码(可能是PHP)可以检查第一个返回行(如果有)的start_date
值,以确定它是否可以用作&#34;当前&#34 ;或&#34; next&#34;:
current
为NULL
且next
为NULL
; start_date
在过去,则current
是第一个返回的行,next
是第二个返回的行(if any) or
NULL`(仅查询返回了一行;; current
为NULL
,next
为第一行,第二行(如果有)不需要。