【问题标题】:select a range from multiple tables named by date从多个按日期命名的表中选择一个范围
【发布时间】:2014-01-20 02:10:34
【问题描述】:

表格结构相同,命名如下(附年份和月份):

- 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

有什么想法吗?

【问题讨论】:

  • 是的。使用 UNION 选项。

标签: php mysql date select sphinx


【解决方案1】:

假设这确实是一个 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() 可用于从日期字符串中获取时间戳)

【讨论】:

    【解决方案2】:
    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
    

    试试这个

    【讨论】:

      猜你喜欢
      • 2019-05-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-25
      相关资源
      最近更新 更多