2015-02-05 21 views
0

這一個種類的複雜,所以希望我能說清楚什麼值出現在列。控制而做了加入

我有兩個表:

views: 
+---------------------+-------------+------------------+ 
| time    | remote_host | referer   | 
+---------------------+-------------+------------------+ 
| 0000-00-00 00:00:00 | 10.0.13.2 | http://foo.com/a | 
| 0000-00-00 00:00:00 | 10.0.13.1 | http://foo.com/b | 
| 0000-00-00 00:00:00 | 10.0.13.2 | http://moo.com | 
| 0000-00-00 00:00:00 | 10.0.13.2 | http://hi.com | 
| 0000-00-00 00:00:00 | 10.0.13.1 | http://foo.com/c | 
+---------------------+-------------+------------------+ 

test_websites: 
+----+----------------+------+ 
| id | url   | name | 
+----+----------------+------+ 
| 1 | http://foo.com |  | 
| 2 | http://moo.com |  | 
+----+----------------+------+ 

我有一個非常接近做什麼,我希望有一個查詢:

SELECT COUNT(*) as count, remote_host, url FROM test_websites 
JOIN views ON referer LIKE CONCAT(url, '%') 
GROUP BY test_websites.url 
ORDER BY count DESC LIMIT 10; 

結果是這樣的:

+-------+-------------+----------------+ 
| count | remote_host | url   | 
+-------+-------------+----------------+ 
|  3 | 10.0.13.2 | http://foo.com | 
|  1 | 10.0.13.2 | http://moo.com | 
+-------+-------------+----------------+ 

講解,我試圖獲得前10個瀏覽過的網站,但是網站網址是在test_websites中定義的。由於http://foo.com是test_websites中的條目,因此以http://foo.com開頭的所有條目都應計爲「一個網站」。因此,連接基於LIKE條件,並且在結果中正確計數爲3的http://foo.com

那麼,問題是,我想REMOTE_HOST是出現最讓這些行的觀點,即與http://foo.com啓動項。在這種情況下,也有意見表開始http://foo.com兩行有10.0.13.1爲遠程主機,所以結果應該顯示10.0.13.1的遠程主機列,而不是遠程主機與啓動的第一項出現與http://foo.com,因爲它現在正在做。

謝謝。

回答

1

修訂

請嘗試以下修正查詢:

SELECT 
    COUNT(*) as count, 
    (
     SELECT A.remote_host 
     FROM views AS A 
     WHERE A.referer LIKE CONCAT(test_websites.url, '%') 
     GROUP BY A.remote_host 
     ORDER BY COUNT(1) DESC 
     LIMIT 1 
    ) AS max_count_remote_host, 
    test_websites.url 
FROM 
    test_websites 
    JOIN views ON views.referer LIKE CONCAT(test_websites.url, '%') 
GROUP BY 
    test_websites.url 
ORDER BY 
    count DESC LIMIT 10; 

在這裏,你可以找到一個working SQL Fiddle example

+0

對不起,我做了一點修改 - 現在它應該沒問題。問候:) - 並感謝你。順便說一句,爲了公平起見,我認爲這種方法基於我在Gordon Linoff的答案中看到的一些東西。 – 2015-02-05 19:02:34

+0

哦,哎呀,其實我覺得這個查詢有一點小錯誤。行'FROM意見A'後,需要有'JOIN test_websites',否則MySQL將產生錯誤' ERROR 1054(42S22):在「阿凡clause''但由於一個未知列「test_websites.url」很多!這個很複雜。 – Kai 2015-02-05 19:29:25

+0

對於之前版本中的錯誤,我感到很抱歉 - 查詢嵌套層次太多。我剛糾正了查詢並添加了一個** [工作SQL小提琴示例](http://sqlfiddle.com/#!2/b12d01/3)**。請注意嵌套查詢中沒有JOIN。問候 :) – 2015-02-05 19:47:37