我有以下情况:
表格词:
| 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>> |
我想替换&lt;&lt;(\ d)&gt;&gt;使用Word-Table中的等效单词。
所以结果应该是
| ID | SENTENCE |
|----|--------------------------------|
| 1 | all your base are belong to us |
| 2 | all is yours |
我想出的是以下SQL代码:
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
我为此做了一个方便的小说:
http://sqlfiddle.com/#!2/634b8/4
代码基本上是可行的,但是我想问一下专业人员,如果在执行计划中没有派生表或没有filesort的方法。
答案 0 :(得分:3)
你应该制作一个每个单词有一个条目的表格,所以你可以通过加入那个表格来表达你的意思(原文如此)。它看起来像这样
SentenceId, wordId, location
2, 7, 1
2, 8, 2
2, 9, 3
他们设置的方式,你没有利用你的数据库,基本上把几个数据点放在1个表字段中。
位置字段(很容易将其称为“顺序”,但由于这是一个SQL关键字,不要这样做,你会讨厌自己)可以用来“排序”句子。
(您可能想将Sentense重命名为句子?)