[英]Assistance with MySQL query & timestamps
我正在尝试创建一个查询,该查询返回属于start_date和end_date中的club_id的所有行的商品,但是查询还应返回与club_id匹配且end_date为0的任何结果 - 任何关于如何获取的想法做这个? 我目前的疑问是......
SELECT
* ,
UNIX_TIMESTAMP( start_date ) AS start_dateStamp,
UNIX_TIMESTAMP( end_date ) AS end_dateStamp
FROM
(`offers`)
WHERE
UNIX_TIMESTAMP( `start_date` ) <1329308797
AND
UNIX_TIMESTAMP( `end_date` ) >1329308797
AND
`club_id` =23
SELECT
`offers`.* ,
UNIX_TIMESTAMP( start_date ) AS start_dateStamp,
UNIX_TIMESTAMP( end_date ) AS end_dateStamp
FROM `offers`
WHERE `club_id` =23
AND (
(
`start_date`<FROM_UNIXTIME(1329308797)
AND `end_date`>FROM_UNIXTIME(1329308797)
)
OR `end_date`=FROM_UNIXTIME(0)
)
请注意,我将转换从unix-timestamp移动到MySQL-date从字段到常量 - 这样它只需转换一次,而不是所有行。 另外,这种方式可以使用索引。
编辑
“date zero”不是Unix-Zero,而MySQL-Zeor应该是最后一行
OR `end_date`='0000-00-00'
另外,如果start_date
和end_date
的数据类型不是DATETIME
而是DATE
,则需要
DATE(FROM_UNIXTIME(...))
代替
FROM_UNIXTIME(...)
你没有指定end_date = 0
还要求start_date > $timestamp
,所以我假设start_date仍然必须符合它的标准。
SELECT
please_name,
the_columns,
you_want_to_select_seperately,
for_reasons,
UNIX_TIMESTAMP(start_date) AS start_dateStamp,
UNIX_TIMESTAMP(end_date) AS end_dateStamp
FROM `offers`
WHERE `club_id` = 23
AND `start_date`) < UNIX_TIMESTAMP(1329308797)
AND (`end_date` > UNIX_TIMESTAMP(1329308797) OR `end_date` = "0000-00-00")
关于SQL的一些注意事项:
*
。 从您最初的问题来看,您真的不是 col BETWEEN min_val and max_val
(边界包括在内) NULL
。 您有一个日期(2012-02-15)或没有(NULL)。 这将允许您的查询只是检查OR end_date IS NULL
这是你想要的吗?
SELECT *
, UNIX_TIMESTAMP(start_date) AS start_dateStamp
, UNIX_TIMESTAMP(end_date) AS end_dateStamp
FROM
`offers`
WHERE
(UNIX_TIMESTAMP(`start_date`) < 1329308797 AND UNIX_TIMESTAMP(`end_date`) > 1329308797)
OR
(`club_id` = 23 AND `end_date` = '0000-00-00 00:00:00')
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.