Унаследовано 20 000 баз данных книг с определенным полем под названием «ключевые слова», которое является беспорядком, в одной огромной таблице, называемой книгами. Попытка добавить значение к каждому из полей «ключевые слова», которое читает слова в этом поле и определяет его точную категорию с помощью одной четкой фразы.Добавление значения в поле
Итак, поиск слова «древний» и добавление значения «меню-древнее».
UPDATE books SET keywords=CONCAT('menu-ancient, ',keywords)
where keywords like '%ancient%';
Это работает, но следующий запрос не делает то, что я хочу!
Предполагается найти все, что только что было сделано, и пройти через них, чтобы найти, у кого из них также есть слово «средневековое», чтобы дать меню подменю - древнее-средневековое.
UPDATE books SET keywords=CONCAT('menu-ancient-medieval, ',keywords)
where keywords = 'menu-ancient' AND keywords LIKE '%medieval%';
Одним из примеров поля заключается в следующем: меню древних, WAR, СРЕДНИЙ ВОЗРАСТ, древний и средневековый, ДРЕВНИЕ К 19-го века,
Я получил меню-древнего предваряется но не к чему с. средневековый бит!
Если я понимаю ваше объяснение, следует ли это не просто изменить из 'keywords = 'menu-ancient'' в' keywords LIKE' menu-ancient% '? –
Первое UPDATE работает отлично, и правильно вставляет новое значение «menu-ancient». Но когда выполняется следующая строка запроса, следующий UPDATE, он не может найти слово «средневековое». Я попробовал метод LIKE и получил «меню-древнее-средневековое, меню древне-древне-древнее, меню-древнее, меню-древнее, NOISBN, PUNIC WARS. РИМ, ДРЕВНИЙ И СРЕДНИЙ, ДРЕВНИЙ В 19-Й ВЕК, I я задаюсь вопросом, пытаться ли выполнить 30 запросов один за другим, строя подменю слишком много! – Jon
Сравнение равенства (** '=' ** operator) не будет соответствовать ни одному из строк, которые были просто обновлены путем добавления ** ' «menu-ancient», «**» к существующему значению. Сравнение равенства будет соответствовать значениям столбца «ключевые слова», которые соответствуют указанной строке. Запятая, добавленная к значению столбца, приведет к сравнению равенства с ' «menu-ancient'', чтобы вернуть FALSE. Подумайте о том, чтобы использовать сравнение« LIKE »или« FIND_IN_SET ». – spencer7593