2010-03-22 1 views
0

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

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

- 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 

Теперь я хотел бы для каждого слова в таблице А дописывания «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, которая заканчивается запятой, разделенной строкой id ... Но я не знаю, возможно ли это.

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

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 

ответ

0

Я должен был сделать «a cleaner double post» этого, чтобы получить ответ.

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

GROUP_CONCAT сделает строку разделенных запятой на основе fileds оно 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

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

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

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