Самый оптимизированный запрос для отображения сетки элементов, имеющих отношения 1: n, использует group_concat?

#php #mysql #json #relationship #group-concat

#php #mysql #json #связь #group-concat

Вопрос:

Мне кажется, что использование GROUP_CONCAT() лучше всего работает при запросе данных для отображения списка, что потребовало бы нескольких отдельных запросов, когда они не используются GROUP_CONCAT() (с большими таблицами). Верно ли это в любом случае?

И есть ли какие-либо другие недостатки, помимо GROUP_CONCAT_MAX_LEN необходимости быть достаточно большими?

Он также довольно прост в использовании, когда вы позволяете MySQL выполнять грязную работу; это генерирует действительный json (сгенерированный sql):

 <<<SQL
SELECT CONCAT(
    '[{', 
    GROUP_CONCAT(
      CONCAT(
        '"id":"', table.id, 
        '"' "," '"filename":"', REPLACE('"', '"', table.filenamehash), 
        '"' "," '"originalname":"', REPLACE('"', '"', table.originalname), 
        '"'
      ) SEPARATOR '},{'
    ), 
    '}]'
  ) AS file_data
SQL;
  

Комментарии:

1. Если какое-либо из значений содержит кавычки или обратную косую черту, они не будут экранированы должным образом.

2. Это серьезный недостаток. Я бы пожертвовал некоторой производительностью, чтобы преодолеть это. Я добавил функции ЗАМЕНЫ, чтобы преодолеть эту проблему, я думаю, этого должно быть достаточно?