2013-08-28 43 views
0

我正在處理一些報告,並認爲我需要使用臨時表。我的代碼執行api調用,以獲取當天與該系統交互的所有用戶cookie。mysql中的臨時表問題

現在我有一張包含所有cookie和他們使用的瀏覽器類型的表格,我可以循環訪問由api提供的cookie數組,然後爲每個瀏覽器執行sql查找計數器,所以最終我可以報告不同瀏覽器完成的瀏覽器訪問次數。

但是,正如你可以想象,如果有餅乾(有)的分配可能需要很長的時間。

從我所知道的解決辦法是讓傳給我的Cookie臨時表和innerjoin到我的cookie數據表,然後做一個

select count(id),broswer ... group by browser 

下面是一個更加代碼視圖什麼我想嘗試做:

$json = file_get_content($apiURL); 
$cookies = ''; 
foreach($json as $val){$cookies .= ','.$val['cookie']; } 
$cookies = substr($cookies,1); 

mysql_query('CREATE TEMPORARY TABLE passedcookies (
    `cookie` varchar(200) NOT NULL, 
    PRIMARY KEY(cookie) 
) values ($cookies);') 

mysql_query('SELECT count(cd.id), cd.browser FROM cookiedata cd 
      INNER JOIN passedcookies pc 
      ON pc.cookie = cd.cookie 
      GROUP BY cd.browser;'); 

mysql_query('DESTROY TEMP TBL;'); 

我是否必須銷燬臨時表?什麼時候銷燬?如果3個用戶運行該報告,每個用戶都將獲得他們自己的臨時表?

感謝您的幫助

回答

2

如果您願意,您可以銷燬臨時表。如果你不這樣做,它會在你的MySQL連接關閉時自動銷燬。除非您使用共享連接,否則當PHP腳本退出時會發生這種情況。

如果你不使用共享連接,那麼每個用戶將得到他們自己的臨時表。

P.S.用於創建臨時表的SQL語法是錯誤的,但您沒有問過這個問題。 CREATE TEMPORARY TABLE中沒有VALUES子句,屬於您在其後使用的INSERT語句。

其實,對於你在做什麼,我不認爲你需要一個臨時表。查詢:

SELECT browser, count(*) 
FROM cookiedata 
WHERE cookie in ($cookies) 
GROUP BY browser 

應該可以正常工作。我認爲MySQL很好地實現了IN (list)