我正在尝试使用 IN
函数(在我的 php 脚本中),例如
WHERE Keywords.Word IN ('$search[0]','$search[1]',...)
然而,我使用的第一个词在数据库中是唯一的,第二个是一个非常流行的词。它没有显示第一个词的任何结果。最后我有 LIMIT 100。
理想情况下我不想使用 AND
因为这会限制结果,所以 OR
似乎最好,我只是很惊讶它没有排名第一值(value)高于其他。
我能做什么?
最佳答案
复杂性与 LIMIT 子句合并。你希望它表现良好,所以你需要从任何分支最多获得 100。使用 CASE/IF 对所有行进行排名的简单方法将导致全表扫描。
SELECT * FROM (
SELECT 1 as prec, column-list FROM table-list
WHERE Keywords.Word = '$search[0]'
LIMIT 100) A
UNION ALL
SELECT * FROM (
SELECT 2 as prec, column-list FROM table-list
WHERE Keywords.Word = '$search[1]'
LIMIT 100) B
UNION ALL
SELECT * FROM (
SELECT 3 as prec, column-list FROM table-list
WHERE Keywords.Word = '$search[2]'
LIMIT 100) C
ORDER BY prec
LIMIT 100;
这对于大表来说效果更好。
关于MySQL,替代使用 IN 哪个会优先考虑第一个值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5297320/