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,因爲它現在正在做。
謝謝。
對不起,我做了一點修改 - 現在它應該沒問題。問候:) - 並感謝你。順便說一句,爲了公平起見,我認爲這種方法基於我在Gordon Linoff的答案中看到的一些東西。 – 2015-02-05 19:02:34
哦,哎呀,其實我覺得這個查詢有一點小錯誤。行'FROM意見A'後,需要有'JOIN test_websites',否則MySQL將產生錯誤' ERROR 1054(42S22):在「阿凡clause''但由於一個未知列「test_websites.url」很多!這個很複雜。 – Kai 2015-02-05 19:29:25
對於之前版本中的錯誤,我感到很抱歉 - 查詢嵌套層次太多。我剛糾正了查詢並添加了一個** [工作SQL小提琴示例](http://sqlfiddle.com/#!2/b12d01/3)**。請注意嵌套查詢中沒有JOIN。問候 :) – 2015-02-05 19:47:37