2012-07-15 38 views
1

我發佈了another question,這個問題已經很好地解決了,但是現在我需要將同一個代碼應用於不同的MySQL代碼片段。在SQL(MySQL)中返回基於今天日期的查詢結果第2部分

我有什麼是

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數據庫。

任何幫助將受到感謝!這是我的頭!

+0

table_c和table_a是如何連接的?他們必須匹配哪些領域? – 2012-07-15 21:27:48

回答

2

你要先把JOIN的其他表放到第一個使用的相關列上(我假設id在另一個表中是關於table_c_id)。

正如我曾在我的answer說你剛纔的問題,你最好做在裸datetime列的比較,以便查詢仍然優化搜索(即能夠利用索引):

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絕不會含有在未來的時間(如明天,下個月,等),但如果可以,你想補充:

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

WHERE子句中的另一條件。

+0

完美!非常感謝您的幫助,這正是我需要的!注意:我必須將「,COUNT(*)AS'num'」放回第一行,以便按照我需要的方式工作。以防萬一其他人需要這個。 – 5ummer5 2012-07-15 23:09:12

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's,crm_date_time_column。 我不確定你如何知道系統中哪些行相互鏈接,因此它會檢查它們是否具有相同的ID。