2
나는 다음과 같은 상황이 :최적화 SQL-를 쿼리 가입
표 단어 :
| ID | WORD |
|----|--------|
| 1 | us |
| 2 | to |
| 3 | belong |
| 4 | are |
| 5 | base |
| 6 | your |
| 7 | all |
| 8 | is |
| 9 | yours |
표 문장 :
| ID | SENTENCE |
|----|-------------------------------------------|
| 1 | <<7>> <<6>> <<5>> <<4>> <<3>> <<2>> <<1>> |
| 2 | <<7>> <<8>> <<9>> |
그리고 내가 대체 할을 < < (\ d) >>에 해당하는 워드 표를 사용하십시오.
그래서 결과는 내가 다음과 같은 SQL-코드를 내놓았다 무엇| ID | SENTENCE |
|----|--------------------------------|
| 1 | all your base are belong to us |
| 2 | all is yours |
해야한다 :
http://sqlfiddle.com/#!2/634b8/4
: 나는 이것에 대한 sqlfiddle했다SELECT id, GROUP_CONCAT(word ORDER BY pos SEPARATOR ' ') AS sentence FROM (
SELECT sentence.id, words.word, LOCATE(words.id, sentence.sentence) AS pos
FROM sentence
LEFT JOIN words
ON (sentence.sentence REGEXP CONCAT('<<',words.id,'>>'))
) AS TEMP
GROUP BY id
코드가 기본적으로 작동하지만, 만약 당신이 프로가 있는지 물어보고 싶습니다. y는 파생 테이블없이 또는 실행 계획에서 filesort없이.
안녕하세요, 내가 정규화 윈 테이블의 제안 된 솔루션을 주셔서 감사합니다, 내 문제의 문제는 정상화에 대해 단지 아니다 문제가 =에서 유래하는 현재 계획) 가장 큰 문제는 derrived table없이 가능하다면 ... – paschdan
문제는 관계형 데이터베이스의 특정 기능을 찾고 있습니다. 하나 같이 사용하십시오. 이 경우 하나의 열에 여러 데이터 "항목"이 있으므로 데이터베이스가 훨씬 더 많은 작업을 수행 할 수 없습니다. 당신이 할 수있는 유일한 방법은 모든 단어를 검색하고, 문장을 검색하고, 코드로 대체하는 것입니다. 이제는 정규 표현식에 참여하지는 않지만 데이터가 어떤 방식인지, 이것이 가능한지, 그리고 아마도 정교함이 아닌지에 따라 달라집니다. 그래서 당신이 계획을 바꿀 수 없다면, 당신은 차선책으로 붙들려있다. ( – Nanne
그래, 실제로 그게 어떻게 이루어지는 지, 나는 단지 문장 표를 얻고 코드를 검색하기 위해 foreach를하고있다. 그 이후의 실제 단어들, 그러나 그때는 다소 천천히 (문장의 수에 의존), 어쨌든 잘 고맙다;) – paschdan