0

次のdbテーブルがありますreview_vote

review_id | user_id | status | date_added 
 2             3        good     20130116135259
 3             3        normal   20130116145259
 4             2        normal   20130116155259
 5             2        good     20130116165259
 6             2        good     20130116175259
 7             1        great    20130116185259
 8             3        good     20130117135259
 9             3        normal   20130117145259

現在、次のクエリを使用して最高の投票を得ることができます。

SELECT review_id FROM review_vote GROUP BY review_id HAVING COUNT(*) = 
(
   SELECT MAX(x.counts) FROM 
   ( 
       SELECT review_id, COUNT(*) counts FROM review_vote GROUP BY review_id
   )x 
) 
order by date_added desc

しかし、毎日最高の票を獲得する必要がある場合、上記のコードをどのように変更できますか? つまり、今日が2013-01-16昨日の最高票を獲得する必要がある場合2013-01-15

使用しようとしてdate_added = CURDATE()失敗しました。SQLFiddle: http://sqlfiddle.com/#!2/9a2b5/6

更新クエリ:

CREATE TABLE IF NOT EXISTS `review_vote` (
  `review_id` int(11) NOT NULL,
  `user_id` int(11) NOT NULL,
  `status` varchar(100) NOT NULL,
  `date_added` varchar(100) NOT NULL,
  KEY `review_id` (`review_id`,`user_id`) USING BTREE
) ENGINE=MyISAM DEFAULT CHARSET=utf8;



INSERT INTO `review_vote` (`review_id`, `user_id`, `status`, `date_added`) VALUES
(223, 2, 'lame', '20130116195259');
INSERT INTO `review_vote` (`review_id`, `user_id`, `status`, `date_added`) VALUES(222, 2, 'lame', '20130115195259');
4

3 に答える 3

1

これを where 条件に追加するだけです:

DATE_FORMAT(date_added, '%Y-%m-%d') = CURDATE()

あなたのエラーに従って更新する

SELECT review_id FROM review_vote AS RV WHERE DATE_FORMAT(RV.date_added, '%Y-%m-%d') = CURDATE()    
    GROUP BY review_id HAVING COUNT() = 
(
    SELECT MAX(x.counts) FROM 
    (
        SELECT review_id, COUNT() counts FROM review_vote GROUP BY review_id
    )x
)

デモをご覧ください:デモ

于 2013-01-16T12:18:01.047 に答える
0
SELECT   review_id
FROM     review_vote
WHERE    date_added LIKE '20130115%'
GROUP BY review_id
ORDER BY COUNT(*) DESC
LIMIT    1

date_addedただし、実際には、列をまたはなどの適切な時間タイプに変更することを検討する必要がありDATETIMEますTIMESTAMP

于 2013-01-16T12:16:18.680 に答える
0

WHERE句に以下を追加します。

`date_added` BETWEEN
  DATE_FORMAT(DATE_SUB(CURDATE(), INTERVAL 1 DAY), '%Y%m%d')
  AND DATE_FORMAT(CURDATE(), '%Y%m%d')

インデックスがあることを確認してくださいdate_added

日付関数のドキュメントはすべてここにあります:http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html

date_added列がネイティブの日付型であると、作業が楽になります。

于 2013-01-16T12:22:49.183 に答える