Как изменить этот запрос, чтобы он выбирал только первую запись с одинаковым link_id из выборки biolink_blocks? В данный момент запрос выбирает все блоки, но мне нужна только первая запись. У меня получается 3 записи с почти одним и тем же содержимым, но мне нужна только первая. Вот текущий запрос: SELECT links.*, B.biolink_block_id, B.settings AS social FROM links LEFT JOIN ( SELECT * FROM biolinks_blocks WHERE type = 'socials' ORDER BY biolink_block_id ASC LIMIT 1 ) B ON B.link_id = links.link_id WHERE B.type = 'socials' AND links.is_enabled = 1 AND links.is_verified = 1 ORDER BY links.link_id ASC LIMIT 9
Для выбора только первой записи с одинаковым идентификатором ссылки (link_id) из таблицы biolinks_blocks, вам нужно изменить запрос следующим образом: ```sql SELECT links.*, B1.biolink_block_id, B1.settings AS social FROM links LEFT JOIN ( SELECT link_id, MIN(biolink_block_id) AS min_biolink_block_id FROM biolinks_blocks WHERE type = 'socials' GROUP BY link_id ) AS B2 ON B2.link_id = links.link_id LEFT JOIN biolinks_blocks AS B1 ON B1.link_id = B2.link_id AND B1.biolink_block_id = B2.min_biolink_block_id WHERE B1.type = 'socials' AND links.is_enabled = 1 AND links.is_verified = 1 ORDER BY links.link_id ASC LIMIT 9 ``` В этом запросе добавлена подзапрос, который находит минимальный biolink_block_id для каждого link_id в таблице biolinks_blocks с условием на тип 'socials'. Затем основной запрос объединяет таблицу links с этим подзапросом и фильтрует только первую запись для каждого link_id.
К сожалению, в MySQL 5.7 отсутствуют оконные функции и СТЕ. Поэтому мы можем использовать подзапрос для решения проблемы. Ниже приведено упрощенное решение, которое можно адаптировать под ваш конкретный случай: ```sql SELECT * FROM blocks JOIN ( SELECT MIN(b.id) id FROM blocks b JOIN links l ON b.link_id = l.id WHERE l.id = 1 ) fb ON fb.id = blocks.id; ``` Вы можете использовать этот SQL-запрос для выполнения требуемой задачи.