2010-03-08 109 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