table
id | word
SELECT id FROM table WHERE
word = "hello" OR
word = "ello" OR
word = "llo" OR
word = "lo" OR
word = "o"
我只需要得到第一個找到的id。如果不是第一 - 然後第二。如果不是第二個 - 然後第三個....
是否有可能只獲得第一個或者是在數據庫中,而不檢查所有的?MySQL短路或
table
id | word
SELECT id FROM table WHERE
word = "hello" OR
word = "ello" OR
word = "llo" OR
word = "lo" OR
word = "o"
我只需要得到第一個找到的id。如果不是第一 - 然後第二。如果不是第二個 - 然後第三個....
是否有可能只獲得第一個或者是在數據庫中,而不檢查所有的?MySQL短路或
ORDER BY length(word) DESC LIMIT 1
MySQL是否停止評估指定限制的以下「OR」子句,或者它們以任何方式評估? – 2011-07-18 14:33:10
太棒了!我搜索了很多,似乎是的,LIMIT子句「終止了計算到達極限數的點」。資料來源:http://www.mysqldiary.com/a-many-to-many-relationship-table-solving-the-exclude-relation-problem/(第三個解決方案測試)。 – 2011-07-18 16:44:35
你不能這樣做的,但處理您的要求的最簡單的方法是將
ORDER BY length(word) DESC
這將返回最長的(最匹配的)結果第一,這樣你就可以使用LIMIT
它。
添加LIMIT 1
到底
使用聯盟可能會有幫助。
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;
看起來真棒:) – Qiao 2010-03-08 13:37:11
我沒有得到你想要的,但我會給它一個鏡頭。
您應該使用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
你要求的是短路評估,而不是異或。 – 2010-03-08 13:25:29