2012-11-15 43 views
2

我有實地考察與下列的表:排序上的兩列

timestamp 
host 
url 

我想看看過去幾年(例如200)的訪問,但在同一主機的同時,團體參觀一起(查看他/她訪問的頁面序列)。

如果我做的:

... SORT BY timestamp DESC, host 

我得到主機搞混了,如果幾個遊客在網上同時

如果我做的:

... SORT BY host, timestamp DESC 

我沒有得到最新的訪問(僅來自每個主機的最新訪問)

我想查看

9:01 | a.com | /index 
9:05 | a.com | /interesting 
9:07 | a.com | /contact 
9:02 | b.com | /index 
9:03 | b.com | /product-a 
9:08 | b.com | /thanks-for-buying 

這是可能的在Mysql或我應該進一步處理結果在PHP?

+0

請解釋欄目和表格內容以及完整的查詢 –

回答

0

的答案上文所指出我在正確的方向,謝謝。這一個工程。 LIMIT 1000將查詢從3分鐘縮短到7秒(40000條記錄)。

SELECT v1.stamp, v1.host FROM visits AS v1 
    LEFT JOIN (SELECT MIN(date) AS firstVisit, host 
       FROM visitor AS v2 
       GROUP BY v2.host 
       ORDER BY firstVisit DESC 
       LIMIT 1000) AS j 
     ON v1.host=j.host 
     ORDER BY firstVisit DESC, v1.host, v1.date DESC 
     LIMIT 100; 
1

試試這個::

Select *, MAX(timestamp_col) as lastVisit from site_table 

GROUP BY HOSTS order by lastVisit desc 
+0

爲什麼OP應該這樣做? – markus

+0

這讓我走上了正軌(見答案)。缺少的是與整個表格的連接(我需要MIN而不是MAX) – tihe

0

你,如果你想在過去200

SORT BY timestamp DESC, host LIMIT 0, 200 

限制的結果,如果你不相同的訪問者再次顯示,使用

SELECT DISTINCT visitor FROM .... 
+0

明確如何獲得該特定用戶的最後一次訪問 –

+0

我確實希望同一個訪問者的多個頁面瀏覽量,但我希望看到它們分組一起。 – tihe

1

你不能做ORDER BY其次是LIMIT然後另一個ORDER BY,所以你必須使用子查詢:

SELECT * FROM (SELECT * 
    FROM visits 
    ORDER BY timestamp DESC 
    LIMIT 200 
) visits2 
ORDER BY host 
+0

在實踐中,這實現了我想要的功能(讓每個主機最近的訪問分組)。我另外想要的是通過首次訪問的時間戳排列主機塊。 – tihe

0

我認爲這是不可能的在一個查詢中正常。你可以試試這個:

SELECT * 
FROM table AS t1 
WHERE t1.timestamp_col >= (SELECT MIN(tstamp) 
    FROM (SELECT t2.timestamp_col 
     FROM tables AS t2 
     WHERE t2.host = t1.host 
     ORDER BY timestamp_col DESC 
     LIMIT 200 
    ) 
) 

我不考這個瘋狂的代碼...但我希望它給你的方式:)

+0

我既不......我需要某種加入,請參閱下面的答案 – tihe