2010-03-08 112 views
3
table 
id | word 

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

我只需要得到第一个找到的id。如果不是第一 - 然后第二。如果不是第二个 - 然后第三个....
是否有可能只获得第一个或者是在数据库中,而不检查所有的?MySQL短路或

+2

你要求的是短路评估,而不是异或。 – 2010-03-08 13:25:29

回答

1
ORDER BY length(word) DESC LIMIT 1 
+0

MySQL是否停止评估指定限制的以下“OR”子句,或者它们以任何方式评估? – 2011-07-18 14:33:10

+0

太棒了!我搜索了很多,似乎是的,LIMIT子句“终止了计算到达极限数的点”。资料来源:http://www.mysqldiary.com/a-many-to-many-relationship-table-solving-the-exclude-relation-problem/(第三个解决方案测试)。 – 2011-07-18 16:44:35

1

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

ORDER BY length(word) DESC 

这将返回最长的(最匹配的)结果第一,这样你就可以使用LIMIT它。

0

添加LIMIT 1到底

0

使用联盟可能会有帮助。

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; 
+0

看起来真棒:) – Qiao 2010-03-08 13:37:11