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