这是一个表格示例:
Table: websites
Domain | Category | Popularity
google.com | 0 | 13,430
yahoo.com | 0 | 1,094
facebook.com | 1 | 23,943
youtube.com | 2 | 17,320
imdb.com | 3 | 6,094
stackoverflow.com | 4 | 2,930
ebay.com | 5 | 5,748
yandex.com | 5 | 3,748
我想通过排除按流行度排序的类别CE = [C1,C2,C3 ... Cn]来返回前N个结果。
例如:
通过按流行程度将搜索引擎CE = [0]排除在外的前3个结果是:
Domain | Category | Popularity
facebook.com | 1 | 23,943
youtube.com | 2 | 17,320
imdb.com | 3 | 6,094
通过排除按受欢迎程度排序的搜索引擎CE = [1,2,3,4,5]以外的所有类别,得出前3名结果是:
Domain | Category | Popularity
google.com | 0 | 13,430
yahoo.com | 0 | 1,094
让我们处理最后一个查询。
我希望它看起来像这样:
SELECT domain, category, popularity FROM (SELECT domain, category, popularity FROM websites WHERE category != [1, 2, 3, 4, 5] ORDER BY popularity) LIMIT 0, 3
我不在乎响应是否按受欢迎程度排序。那是我可以重做客户端的事情。
我知道这是核心级的东西,但是有什么方法可以加快速度吗?毕竟是整个表扫描!
您可以使用LIMIT
子句来执行此操作,所有要做的就是确保WHERE
子句过滤掉不需要的类别。尝试这个:
SELECT *
FROM myTable
WHERE category NOT IN(category, list)
ORDER BY popularity DESC
LIMIT 3;
在列表中传递的方法是找到一种方法,以逗号分隔要过滤的类别的列表。有关更多信息,IN
运营商,看到这个链接。
这是一个SQL Fiddle示例,显示了两个示例案例。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句