在SQL(MySQL)第2部分中基于今天的日期返回查询结果

时间:2012-07-15 21:23:07

标签: mysql sql inner-join where-clause

我发布了another question已经完美解决但是我现在需要将相同的代码应用于不同的MySQL代码。

我拥有的是

SELECT value, COUNT(*) AS 'num' 
FROM table_c 
WHERE table_c_id IN (9, 17, 25)
GROUP BY value

我现在想做的只是显示当前日期输入的结果?

我检查当前日期的当前代码片段,效果很好(日期为unixtime格式)

( xxxxxxxxxxxxxx and curdate() = date( from_unixtime( b.crm_date_time_column ) ) )

我查询的问题是日期列位于一个完全不同的表table_a。

如何编写MySQL以检查table_a的日期并应用我现有的SQL日期?

这是一个MySQL数据库。

任何帮助都会感激不尽!这是我的头脑!

2 个答案:

答案 0 :(得分:2)

您希望将另一个表JOIN放在第一个使用相关列的第一个表上(我假设另一个表中的idtable_c_id相关。)

正如我在answer中对您之前的问题所述,您最好在裸日期时间列上进行比较,以便查询保持可搜索状态(即能够使用索引):

SELECT     a.value
FROM       table_c a
INNER JOIN table_a b ON a.table_c_id = b.id
WHERE      a.table_c_id IN (9,17,25) AND
           b.crm_date_time_column >= UNIX_TIMESTAMP(CURDATE())
GROUP BY   a.value 

这假设crm_date_time_column将永远不会包含未来的时间(例如明天,下个月等),但如果可以,则只需添加:{/ p>

AND b.crm_date_time_column < UNIX_TIMESTAMP(CURDATE() + INTERVAL 1 DAY)

作为WHERE子句中的另一个条件。

答案 1 :(得分:1)

SELECT   c.value
FROM     table_c c, table_a a
WHERE    c.id IN (9, 17, 25)
 AND     b.crm_date_time_column >= UNIX_TIMESTAMP(CURDATE())
 AND     c.id = a.id
GROUP BY c.value

你可以用这样的查询来做。它从两个表中选择行,检查它们是否具有相同的ID,当前日期是table_a,crm_date_time_column。 我不知道你怎么知道哪些行在你的系统中相互链接,所以它检查它们是否具有相同的id。