我在问你一些建议。我有一个网站,我有视频和用户可以给他们拇指向上和拇指向下。他们被保存在一张桌子上。目前,我有三个sql查询来获取大拇指的计数、拇指向下的计数和登录用户提供的内容(如果他这样做的话)。
现在我正在考虑提高性能,但是我不知道还有什么更好,因为我希望减少查询的数量。
方法1)保持这三个查询的原样:
SELECT COUNT(*) as rowcount FROM `videolikes` WHERE `vid` = 'gt6w_RZfs5yx' AND `thumb` = '1' LIMIT 1
SELECT COUNT(*) as rowcount FROM `videolikes` WHERE `vid` = 'gt6w_RZfs5yx' AND `thumb` = '0' LIMIT 1
SELECT * FROM `videolikes` WHERE `vid` = 'gt6w_RZfs5yx' AND `uid` = '1' LIMIT 1方法2)使用子查询进行一个查询(类似这样的查询(这里不工作)):
SELECT *, (SELECT COUNT(*) as rowcount FROM `videolikes` WHERE `vid` = 'gt6w_RZfs5yx' AND `thumb` = '1' LIMIT 1) as thumbsups, (SELECT COUNT(*) as rowcount FROM `videolikes` WHERE `vid` = 'gt6w_RZfs5yx' AND `thumb` = '0' LIMIT 1) as thumbsdowns FROM `videolikes` WHERE `vid` = 'gt6w_RZfs5yx' AND (`uid` = '1' OR `uid` = NULL)方法3)也许是你自己的想法?
告诉我你的想法,并给出一些代码(如果你想)。
向夏洛特问好
编辑:我将添加更多信息: vid是视频的id。所有关于喜欢的内容都存储在这个表中,它引用了带有VideoID (vid)的视频。uid是表示类似(或不喜欢)的UserID。这意味着这张桌子上不仅有一个视频的好恶之处。要知道哪一种喜欢和不喜欢是为了哪一种视频,类似的东西将与视频一起存储。
发布于 2014-07-31 15:25:12
或者您可以使用一个查询来查询向上/向下的投票:
SELECT SUM(thumb = 1) AS upvote, SUM(thumb = 0) AS downvote, ....MySQL将获取这些thumb = X测试的布尔值真/假结果,转换为整数0或1,然后将它们相加。
发布于 2014-07-31 15:24:52
您可以组合前两个查询,如:
SELECT
SUM(IF(`thumb` = 1, 1, 0)) AS rowcountthumb0,
SUM(IF(`thumb` = 0, 1, 0)) AS rowcountthumb1
FROM `videolikes` WHERE `vid` = 'gt6w_RZfs5yx'由于上一个查询在语义上似乎不同,为了清楚起见,我会将它与这里提到的查询分开。
https://stackoverflow.com/questions/25062824
复制相似问题