2013-06-17 7 views
3

MySQL의 저장 프로 시저로 "anagram"함수를 수행하는 방법을 알아 내려고하고 있습니다. 사전에있는 모든 단어를 포함하는 데이터베이스가 있다고 가정 해 봅시다. 일부 문자의 매개 변수를 VARCHAR로 입력하고 해당 문자의 아나그램을 구성하는 단어 목록을 가져 오려고합니다.MySQL에서 문자열의 각 문자에 변수를 어떻게 할당합니까?

내가 말하고자하는 것은, SQL 명령을 실행하여 "매개 변수와 동일한 길이의 모든 단어를 선택하고 매개 변수의 각 문자를 포함하는"방법을 설명하는 것입니다.

사용할 수있는 문자열 함수 (http://www.hscripts.com/tutorials/mysql/string-function.php)를 살펴 보았습니다. 나는 이것들이 어떤 식 으로든 함께 사용될 수 있다고 확신하지만 그것이 복잡해지면 구문을 올바르게 얻을 수는 없다.

나는 SQL에 익숙하지 않으며 사용 가능한 문자열 함수가 매우 제한적으로 보인다. 어떤 도움을 크게 주시면 감사하겠습니다 :)

+0

내가 개인적으로 정규 표현식을 사용합니다 :

그럼 당신은 같은 뭔가 아나그램을 찾을 수 – exussum

+0

오, 그래, 아마도 그 사람들에 대해 생각해 봤어야 했어 – ecirp

+0

http://stackoverflow.com/questions/1559751/regex-to-make-sure-that-the-string-contains-at-least- one-lower-case-char-upper는이 하나와 비슷한 경우 정규 표현식에 대한 자세한 정보를 제공합니다. – exussum

답변

0

SQL은 아마도이 일을하는 적당한 장소가 아닙니다, 당신은 프런트 엔드에서해야합니다.

우선 아나그램의 속성을 고려해보십시오. 사전의 단어와 길이가 같습니다. 이러한 단어를 검색하여 시작할 수 있습니다.

문자 하나당 변수를 만드는 대신 배열을 사용하는 것이 좋습니다 각 문자는 인덱스 (a = 0, b = 3 등 ...)에 매핑됩니다. 단어가 "아빠"이처럼 보이는 구조 될 겁니다 대한 있도록 그 편지로 실행할 때마다 그 버킷에 대한 값을 증가 :

arr[0]=1, arr[1]=0, arr[2]=0, arr[3]=2, arr[4]=0

... 지금 당신 단어가 배열의 각 항목과 일치하는지 확인할 수 있습니다.

SQL에서는 불가능하지는 않지만 데이터베이스에서 그러한 종류의 논리를 나타낼 수 있습니다. 예를 들어 사전 단어에 대한 참조를 가지며 각 튜플이 배열이 될 다른 테이블과 같이 모든 항목을 검색 할 수 있습니다 같은 값으로

+0

물론 다른 방법 대신 매핑 테이블에서 단어를 참조 할 수도 있습니다. – Mataniko

+0

각 문자를 어떻게 캡처합니까? 정규식을 사용하는 것 같네요? – ecirp

+0

프런트 엔드에서이 작업을 수행하는 경우 char 배열로 반복합니다 (대부분의 프로그래밍 언어로 수행 할 수 있습니다). mysql에서 0에서 char_length로 이동하는 루프를 수행 할 수 있으며 하위 문자열 기능을 사용하여 한 번에 한 문자 씩 가져올 수 있습니다. (내가 SQL은이 일을 수행하는 최악의 장소라고 언급 했는가?) – Mataniko

2

그렇지 않습니다. 관계형 데이터베이스에 요청하는 것이 현명한 방법은 아닙니다. 누군가가 관계형 데이터베이스를 사용하여 철자 바꾸기 발견을 구현하기 위해 총 끝에 저를 강요 한 경우

그러나,이처럼 비정규 것 :

"분류"
word | sorted 
-----|------- 
bar | abr 
bra | abr 
keel | eekl 
leek | eekl 

"단어"의 모든 문자로 구성 , 총 주문 인 경우 원하는 규칙을 사용하여 정렬됩니다. 해당 부분을 계산하려면 다른을 SQL보다 사용할 수 있습니다. (http://dev.mysql.com/doc/refman/5.0/en/regexp.html)가

SELECT w2.word AS anagram 
FROM words w1 
JOIN words w2 ON w1.sorted=w2.sorted 
WHERE w1.word = 'leek' 
AND w2.word <> w1.word 
+0

내 대답의 조합으로 이것이 괜찮은 해결책이 될 수 있다고 생각한다. 사전에있는 모든 단어를 정렬하여 다른 테이블에 저장하고 (중복 된 단어는 저장하지 마십시오!) 단어 테이블에 해당 ID를 참조하십시오. 그런 다음 분석기를 찾으려는 단어를 정렬하고 해당 ID를 가져와 일치하는 단어를 모두 검색 할 수 있습니다. 당신이 말했듯이 총에 머리 총 – Mataniko

관련 문제