【问题标题】:Fetch the most viewed data in databases获取数据库中浏览次数最多的数据
【发布时间】:2012-06-21 21:06:31
【问题描述】:

我想从数据库中获取浏览次数最多的照片,但我不知道该如何完成。这是我目前的 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 的照片。

我该如何解决这个问题?

提前致谢。

【问题讨论】:

  • 使用隐式连接是一种 SQL 反模式。显式连接更容易维护,并且由于意外交叉连接等原因而更不容易出错。隐式连接在 20 年前被替换。你为什么还在使用它们?
  • 20 年前?! O.o 你在开玩笑吧?我不知道

标签: mysql sql compare


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    观看次数最多的照片... 有两种方法。

    简单的一个: 在照片表中添加一个作为计数器的字段,并在每次查看照片时更新该字段。

    困难的: 这将允许您将视图跟踪回用户。 制作一个允许用户 ID、照片 ID 和计数器的新表。

    每次用户查看一张新照片时,它都会与计数器一起放入其中。 当他或她再次查看它时,增加计数器。

    然后使用 group by 和 count(userid) 构建一个复杂的查询 有点像:

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

    【讨论】:

      猜你喜欢
      • 2020-08-15
      • 1970-01-01
      • 1970-01-01
      • 2021-09-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-20
      • 1970-01-01
      相关资源
      最近更新 更多