2010-03-08 3 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 만 가져와야합니다. 처음이 아니라면 - 그 다음. 두 번째가 아니라면 세 번째 ....
모든 것을 확인하지 않고 데이터베이스에있는 첫 번째 OR 만 가져올 수 있습니까? 당신이에 LIMIT을 사용할 수 있도록 먼저 결과MySQL 단락 OR

+2

는 단락 회로 평가,하지 XOR입니다. –

답변

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

MySQL은 제한을 지정하는 다음 "OR"절을 평가하지 않거나 아무렇게나 평가됩니까? –

+0

위대한 !! 나는 많은 것을 찾았고, 그렇습니다. LIMIT 절은 "한계 수에 도달하는 지점에서 계산을 종료합니다"라고 생각합니다. 출처 : http://www.mysqldiary.com/a-many-to-many-relationship-table-solving-the-exclude-relation-problem/ (세 번째 솔루션 테스트). –

1

당신은 그런 식으로 할 수는 없지만이 가장 긴 (가장 일치)을 반환

ORDER BY length(word) DESC 

에 요청을 처리 할 수있는 가장 쉬운 방법은 것 그것.

0

도움이 될 수 있습니다 연합 (EU)을 사용하여 최종

0

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

굉장해 :) – Qiao

0

나는 당신이 원하는 것을 얻지 못한다. 그러나 나는 그것을 시도 할 것이다.

아마도 REGEXP를 사용해야합니다.

이것은 다음 단어로 끝나는 단어와 일치합니다.
SELECT name FROM pet WHERE 이름 REGEXP 'O $'ORDER BY 길이 (이름) DESC LIMIT 1; 당신이 요구하는 어떤

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