从按日期命名的多个表中选择一个范围

时间:2014-01-02 15:29:21

标签: php mysql date select sphinx

这些表具有相同的结构,并且命名为(年份和月份附加):

- tb_201302
- tb_201303
- tb_201304

每个表都有一个字段date_insert,其中包含时间戳中的确切插入时间。

问题:我希望能够从多个表中进行选择,例如(在伪代码中):

SELECT * FROM tb_201302, tb_201303 WHERE date_insert > '02/15' and date_insert < '03/25'
  

'02 / 05'和'03 / 25'通常是时间戳

所以它基本上选择多个表中的范围。

我也尝试过使用UNION

SELECT * FROM (
(SELECT * FROM tb_201302 WHERE date_insert > '02/15' and date_insert < '03/25')
UNION
(SELECT * FROM tb_201303 WHERE date_insert > '02/15' and date_insert < '03/25')
) results

但我得到syntax error, unexpected '(', expecting SELECT near '(SELECT * FROM tb_201202

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

确实这是一个 SphinxQL 问题(错误消息似乎是Sphinx产生 NOT MySQL 产生的错误)...

您的第一次尝试是正确的,只需要将实际时间戳转换为数字。可以在创建索引时使用UNIX_TIMESTAMP(),以便sphinx属性包含unix时间戳。

然后可以将其转换为相同的数字

SphinxQL> SELECT * FROM tb_201302, tb_201303 
          WHERE date_insert > 1360886400 AND date_insert < 1364169600

(PHP中的strtotim()可用于从日期字符串中获取时间戳)

答案 1 :(得分:1)

SELECT * FROM (
    SELECT * FROM tb_201302 WHERE date_insert > '02/15' and date_insert < '03/25'
    UNION
    SELECT * FROM tb_201303 WHERE date_insert > '02/15' and date_insert < '03/25'
) results

试试这个