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このデータベースで行がどのように見えるかを理解するために、データベースから 1 つの行を取得します。

(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 の写真を印刷する必要があります。

この問題を解決するにはどうすればよいですか?

前もって感謝します。

4

2 に答える 2

3

あなたが使いたいかもしれませんorder by count(*) desc

于 2012-06-21T21:11:53.893 に答える
0

最も閲覧された写真...これには2つのアプローチがあります。

簡単な方法:カウンターである写真テーブルにフィールドを追加し、写真が表示されるたびにそのフィールドを更新します。

難しいもの:これにより、ユーザーまでのビューを追跡できるようになります。ユーザーID、写真ID、カウンターを許可する新しいテーブルを作成します。

ユーザーが新しい写真を表示するたびに、カウンター1が表示されます。彼または彼女がそれを再び見るとき、カウンターを増やします。

次に、group byとcount(userid)を使用して複雑なクエリを作成します。

SELECT photoid , count(photoid) as howmuch FROM photostats WHERE 1 GROUP BY photoid ORDER BY howmuch DESC
于 2012-06-21T21:20:54.007 に答える