我想从数据库中查看查看次数最多的照片,但我不知道如何实现这一目标。这是我目前的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的照片。在这种情况下,它是错误的 - 它应该打印出ID为85的照片。
如何解决此问题?
提前致谢。
答案 0 :(得分:3)
您可能想要使用order by count(*) desc
答案 1 :(得分:0)
观看次数最多的照片...... 这有两种方法。
简单的一个: 将字段添加到作为计数器的照片表中,并在每次查看照片时更新该字段。 困难的一个: 这将允许您跟踪用户的视图。 制作一个允许用户ID,照片ID和计数器的新表。每次用户观看新照片时,都会将其放入计数器中。 当他或她再次看到它时,会增加柜台。
然后用group by和count(userid)构建一个复杂的查询 有点像:
SELECT photoid , count(photoid) as howmuch FROM photostats WHERE 1 GROUP BY photoid ORDER BY howmuch DESC