2012-06-21 36 views
2

我想從數據庫中獲得最多觀看的照片,但我不知道如何完成此操作。這是我的SQL的時刻:獲取數據庫中查看次數最多的數據

SELECT * FROM photos AS p, viewers AS v 
WHERE p.id = v.id_photo 
GROUP BY v.id_photo 

的數據庫:

CREATE TABLE IF NOT EXISTS `photos` (
    `id` int(10) NOT NULL AUTO_INCREMENT, 
    `photo_filename` varchar(50) NOT NULL, 
    `photo_camera` varchar(150) NOT NULL, 
    `photo_taken` datetime NOT NULL, 
    `photo_resolution` varchar(10) NOT NULL, 
    `photo_exposure` varchar(10) NOT NULL, 
    `photo_iso` varchar(3) NOT NULL, 
    `photo_fnumber` varchar(10) NOT NULL, 
    `photo_focallength` varchar(10) NOT NULL, 
    `post_coordinates` text NOT NULL, 
    `post_description` text NOT NULL, 
    `post_uploaded` datetime NOT NULL, 
    `post_edited` datetime NOT NULL, 
    `checkbox_approxcoor` enum('0','1') NOT NULL DEFAULT '0', 
    PRIMARY KEY (`id`), 
    UNIQUE KEY `id` (`id`) 
) 

CREATE TABLE IF NOT EXISTS `viewers` (
    `id` int(10) NOT NULL AUTO_INCREMENT, 
    `id_photo` int(10) DEFAULT '0', 
    `ipaddress` text NOT NULL, 
    `date_viewed` datetime NOT NULL, 
    PRIMARY KEY (`id`), 
    UNIQUE KEY `id` (`id`) 
) 

viewers的數據是這樣的:

(1, 85, '3892a0ab97d6ff325f285b27b847070f', '2012-06-21 22:49:25'), 
(2, 84, '3892a0ab97d6ff325f285b27b847070f', '2012-06-21 22:49:25'), 
(3, 85, '3892a0ab97d6ff325f285b27b847070f', '2012-06-21 22:49:25'); 

一個單列從數據庫中photos瞭解如何行看起來像在這個數據庫中:

(85, 'P1170986.JPG', 'Panasonic DMC-LX3', '2012-06-19 18:00:40', '3968x2232', '10/8000', '80', '50/10', '51/10', '', '', '2012-06-19 18:45:17', '0000-00-00 00:00:00', '0') 

此刻的SQL只打印ID爲84.在這種情況下,照片的時候是錯的 - 它應該打印出來的照片與編號85

我怎樣才能解決這個問題?

在此先感謝。

+0

這是一個SQL反模式來使用隱式連接。顯式連接更容易維護,並且由於意外交叉連接等原因而不易出錯。 20年前取代了含蓄聯結。你爲什麼還在使用它們? – HLGEM

+0

20年前?!哦,你在開玩笑吧?我不知道 – Erik

回答

3

你可能想使用order by count(*) desc

+0

這似乎是完美的工作!非常感謝:D – Erik

0

觀看次數最多的照片... 有兩種方法可供選擇。

簡單之一: 將字段添加到作爲計數器的照片表中,並在每次查看照片時更新該字段。

硬一: 這將允許你跟蹤回到用戶的意見。 創建一個允許用戶ID,照片ID和計數器的新表格。

每次用戶查看新照片時,都會將其與計數器一起放入。 當他或她看到它再次增加櫃檯。

然後建立與組複雜的查詢和統計(用戶ID) 有點像:

SELECT photoid , count(photoid) as howmuch FROM photostats WHERE 1 GROUP BY photoid ORDER BY howmuch DESC