2015-09-25 17 views
0

我有一個名人圖片網站,所以在這個網站的用戶可以喜歡這個圖片。頂部像圖片 - mysql查詢

我想顯示10張最喜歡今天的照片!

表的帖子:

CREATE TABLE IF NOT EXISTS `posts` (
    `id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT, 
    `foto` varchar(200) NOT NULL, 
    `data` datetime NOT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 AUTO_INCREMENT=1 ; 

照片是圖片的URL和數據,我張貼這張圖片。

,喜歡:

CREATE TABLE IF NOT EXISTS `likes` (
    `ip` varchar(40) NOT NULL, 
    `post` int(11) UNSIGNED NOT NULL, 
    FOREIGN KEY (`post`) REFERENCES posts (`id`) ON DELETE CASCADE 
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 AUTO_INCREMENT=1 ; 

IP是誰喜歡的圖片和帖子是帖子表的ID的用戶。

我想今天最喜歡的職位。可能嗎?到目前爲止,我曾嘗試:

SELECT COUNT(likes) AS rank FROM likes 
+0

是的。你有什麼嘗試? – vhu

+0

SELECT COUNT(喜歡)AS排名從喜歡和我不知道下一步該怎麼做(即使它是正確的) –

+0

您需要加入張貼表和計數。 –

回答

1

您必須添加一個dt列(數據類型應該是日期或日期時間)在likes表和保存照片時在此列中喜歡的時間,然後使用這個查詢來獲取今天喜歡

SELECT p.id, count(*) as cnt 
FROM posts p INNER JOIN likes l ON p.id=l.post 
WHERE date(l.dt) = current_date() 
GROUP BY 1 
ORDER BY 2 DESC 

此查詢將其id一起返回今天的每一個崗位作爲cnt像計數。排序爲最喜歡的帖子頂部

+0

哦,很好!我不能在這種情況下使用POSTS數據時間行嗎?或者這不是一個好主意? –

+0

不,使用帖子日期不會達到你想要的 – mynawaz

0

你應該寫一個SELECT查詢,JOINs兩個表一起使用posts.id和likes.post列。您可以使用GROUP BY來確保每張圖片只顯示一次,COUNT是檢查每張圖片有多少喜歡的關鍵。 ORDER BY可幫助您找到排名最高的圖片,而WHERE可將您的範圍限定在特定日期或日期。使用LIMIT限制結果集大小。