Как изменить этот запрос, чтобы он выбирал только первую запись с одинаковым 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-запрос для выполнения требуемой задачи.