这些表具有相同的结构,并且命名为(年份和月份附加):
- 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
有什么想法吗?
答案 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
试试这个