MySQL выбрать обновление - PullRequest
0 голосов
/ 22 марта 2010

Я прочитал довольно много вопросов об обновлении selcet +, но не могу понять, как это сделать. Так что придется с самого начала спрашивать.

Я хотел бы обновить таблицу на основе данных в другой таблице. Настройка выглядит так:

- TABLE a ( int ; string )
ID     WORD
1      banana
2      orange
3      apple

- TABLE b ( "comma separated" string ; string )
WORDS  TEXTAREA
0      banana                  -> 0,1
0      orange apple apple      -> BEST:0,2,3 ELSE 0,2,3,3
0      banana orange apple     -> 0,1,2,3

Теперь я хотел бы, чтобы для каждого слова в TABLE добавлялось ", a.ID" к b.WORDS, например:

SELECT id, word FROM a
(for each) -> UPDATE b SET words = CONCAT(words, ',', a.id) WHERE b.textarea like %a.word%

Или даже лучше: замените слово, найденное в b.textarea, на «, a.id», так что это b.textarea, который в конечном итоге будет содержать строку идентификаторов, разделенных запятыми ... Но я не знаю, является ли это возможно.

Пробовал это, но не работает. Но я думаю, что все ближе:

UPDATE a, b
SET b.textarea =
replace(b.textarea,a.word,CONCAT(',',a.id))
WHERE a.word IN (b.textarea)
ORDER BY length(a.word) DESC

Ответы [ 2 ]

0 голосов
/ 24 марта 2010

Мне нужно было сделать " более чистый двойной пост " этого, чтобы получить ответ.

Решение может быть составлено на основе этого руководства: http://dev.mysql.com/doc/refman/5.1/en/group-by-functions.html#function_group-concat

GROUP_CONCAT создаст строку, разделенную запятыми, на основе полей, которые он должен CONCAT.Отлично.А что касается предпочтительного решения без дубликатов в результате, в руководстве есть пример, который отфильтровывает дубликаты с использованием DISTINCT внутри GROUP_CONCAT:

mysql> SELECT student_name,
    ->     GROUP_CONCAT(DISTINCT test_score
    ->               ORDER BY test_score DESC SEPARATOR ' ')
    ->     FROM student
    ->     GROUP BY student_name;
0 голосов
/ 22 марта 2010

Я закончил обходной тур. Я экспортировал все a.words, чтобы преуспеть и создал обновление для каждой строки как это:

UPDATE `tx_ogarktiskdocarchive_loebe` SET `temp_dictionay` = replace(lower(temp_dictionay) , lower('Drygalski’s Grønlandsekspedition'), CONCAT(',',191));

Затем я вставил строки aprox 1000 в файл ans sql и выполнил его. Готово.

...