2010-10-03 157 views
0

IM學習的MySQL命令,並結合多個查詢的方法,所以爲了獲得這個目標,現在我需要把這些查詢組合:結合多個MySQL查詢到一個

list($TotalVisitsToday) = $db->sql_fetchrow($db->sql_query("SELECT COUNT(DISTINCT ip_address) FROM table_iptracking WHERE `date_time` between '$yesterday' and '$today' ")); 
    list($TotalVisitsYesterday) = $db->sql_fetchrow($db->sql_query("SELECT COUNT(DISTINCT ip_address) FROM table_iptracking WHERE `date_time` between '$yesterday_1' and '$yesterday' ")); 

    list($TotalPVisitsToday) = $db->sql_fetchrow($db->sql_query("SELECT count(ipid) FROM table_iptracking WHERE `date_time` between '$yesterday' and '$today'")); 
    list($TotalPVisitsYesterday) = $db->sql_fetchrow($db->sql_query("SELECT count(ipid) FROM table_iptracking WHERE `date_time` between '$yesterday_1' and '$yesterday'")); 

    list($TotalCrawlers) = $db->sql_fetchrow($db->sql_query("SELECT count(ipid) FROM table_iptracking WHERE hostname LIKE '%crawl%' ")); 

我對如何不知道混合上面的行!

回答

0

你可能形成的SQL語句組成工會,像...

SELECT COUNT(DISTINCT ip_address) 
    FROM table_iptracking 
    WHERE `date_time` between '$yesterday' and '$today' 
UNION 
SELECT COUNT(DISTINCT ip_address) 
    FROM table_iptracking 
    WHERE `date_time` between '$yesterday_1' and '$yesterday' 
UNION 
SELECT count(ipid) 
    FROM table_iptracking 
    WHERE `date_time` between '$yesterday' and '$today' 
UNION 
SELECT count(ipid) 
    FROM table_iptracking 
    WHERE `date_time` between '$yesterday_1' and '$yesterday' 
UNION 
SELECT count(ipid) 
    FROM table_iptracking 
    WHERE hostname LIKE '%crawl%' 

我不能說我會建議這一點,雖然。結果集不同行意味着不同的東西,從長遠來看可能會證明麻煩。

+0

我試過聯盟之前,你建議這個答案,但結果是零和不起作用 – 2010-10-05 18:19:56

0

我不知道你的最終目標,但如果你只是想在一個查詢,你可以做這樣的:

SELECT 
(SELECT COUNT(DISTINCT ip_address) FROM table_iptracking WHERE 'date_time' between '$yesterday' and '$today') COUNT1, 
(SELECT COUNT(DISTINCT ip_address) FROM table_iptracking WHERE 'date_time' between '$yesterday_1' and  '$yesterday') COUNT2, 
(SELECT COUNT(ipid) FROM table_iptracking WHERE 'date_time' between '$yesterday' and '$today') COUNT3, 
(SELECT COUNT(ipid) FROM table_iptracking WHERE 'date_time' between '$yesterday_1' and '$yesterday') COUNT4, 
(SELECT COUNT(ipid) FROM table_iptracking WHERE hostname LIKE '%crawl%') COUNT5 

(你可以在MySQL省略FROM caluse)

+0

你的答案很酷,我試過了,但它沒有工作,你確定的語法嗎? – 2010-10-05 18:19:18

+0

是的,語法是正確的,你會得到什麼錯誤? – 2010-10-06 02:08:13

+0

另外,它是MySQL還是PHP相關?你確定變量佔位符被你的PHP腳本中的值正確替換嗎?不幸的是,由於我是一名ASP.NET開發人員,因此我無法幫助您,但語法對MySQL確實有效(實際上很簡單)。嘗試從MySQL客戶端(如MySQL命令行)運行查詢以確保其正常工作。 – 2010-10-06 02:24:25