MySQL短路OR

时间:2010-03-08 13:20:51

标签: mysql

table  
id | word

SELECT id FROM table WHERE 
word = "hello" OR 
word = "ello" OR 
word = "llo" OR 
word = "lo" OR 
word = "o"

我只需要找到第一个ID。如果不是第一个 - 那么第二个。如果不是第二个 - 那么第三个.... 是否可以只获取数据库中的第一个OR而不检查所有OR?

5 个答案:

答案 0 :(得分:1)

你不能这样做,但处理你的请求的最简单方法是

ORDER BY length(word) DESC

这将首先返回最长(最佳匹配)的结果,因此您可以在其上使用LIMIT

答案 1 :(得分:1)

ORDER BY length(word) DESC LIMIT 1

答案 2 :(得分:0)

在末尾添加LIMIT 1

答案 3 :(得分:0)

使用Union可能有所帮助。

mysql> select * from words;
+----+-------+
| id | word  |
+----+-------+
|  1 | hello | 
|  2 | ello  | 
|  3 | llo   | 
|  4 | lo    | 
|  5 | o     | 
+----+-------+
5 rows in set (0.00 sec)


SELECT id
FROM   (SELECT id
        FROM   words
        WHERE  word = 'hello'
        UNION
        SELECT id
        FROM   words
        WHERE  word = 'ello'
        UNION
        SELECT id
        FROM   words
        WHERE  word = 'llo'
        UNION
        SELECT id
        FROM   words
        WHERE  word = 'lo'
        UNION
        SELECT id
        FROM   words
        WHERE  word = 'o') w
LIMIT  1; 

答案 4 :(得分:0)

我没有得到你想要的东西,但我会试一试。

您应该使用REGEXP。

这将匹配任何以o结尾的单词 SELECT name FROM pet WHERE name REGEXP'o $'ORDER BY length(name)DESC LIMIT 1;

http://dev.mysql.com/doc/refman/5.0/en/regexp.html#operator_regexp