MySQL Update set

105
12 марта 2021, 01:30

Всем привет. Такая задача:

UPDATE `table` SET `colum` = (SELECT * FROM `table2 WHERE visible = 1 LIMIT 0,1) WHERE `id` = 12`

Все работает пока возвращает один ответ. Если же убрать LIMIT начинает ругаться что ответ не один. Можно ли как то превратить ответ в строку. Чтобы работало без LIMIT (пожалуйста не спрашивайте зачем мне это нужно)

Answer 1

Поскольку необходимо поле нескольких строк сконкатенировать в одно значение (приму за данность что это поле так же текстовое и называется name) - то пригодится функция GROUP_CONCAT:

UPDATE `table` SET `colum` = (
  SELECT group_concat(name) FROM `table2 
  WHERE visible = 1
) WHERE `id` = 12

Если не указан другой separator то значения строк будут разделены запятой. Другой разделитель можно указать синтаксисом

group_concat(name SEPARATOR ' ')

Необходимо обратить внимание, что group_concat имеет верхний лимит размера результирующей строки: он определяется переменной group_concat_max_len. При превышении этого размера строка будет усечена в конце.

READ ALSO
Разложить данные в таблицу на сайт

Разложить данные в таблицу на сайт

Через api получил такие данные

111
Перенос данных из одного массива в другой и сложное условие

Перенос данных из одного массива в другой и сложное условие

Суть: переносил сайт с одной CMS на другую (с самописной на Modx)Спустя некоторое время, потребовалось доперенести некоторые данные

92
Обработка html страницы с данными

Обработка html страницы с данными

Всем добрый вечерПомогите разобраться с такой задачей

78
laravel избежать дублирования при join

laravel избежать дублирования при join

Как избежать дублирования данных при join в laravel?

91