Это ваш запрос (несколько отформатирован):
SELECT u.username, a.user_id, a.id,a.text,a.lang as fromLang, b.lang as toLang,
GROUP_CONCAT(DISTINCT b.id) AS translation_ids
FROM sentence a INNER JOIN
sentence_relationship sr
ON sr.sentence_id = a.id INNER JOIN
sentence b
ON b.id = sr.translation_id AND a.id = sr.sentence_id INNER JOIN
users as u
ON u.id = a.user_id
GROUP BY a.id
LIMIT 10;
Неясно из вашего вопроса, является ли group_concat()
был добавлен с group by
. Это может замедлить работу.
limit 10
принимает первые 10 a.id
s, которые соответствуют (group by
делает неявный заказ). Если вы сделаете это с подзапрос, это, вероятно, ускорит запрос:
SELECT u.username, a.user_id, a.id,a.text,a.lang as fromLang, b.lang as toLang,
GROUP_CONCAT(DISTINCT b.id) AS translation_ids
FROM (select s.*
from sentence s
order by a.id
limit 10
) a INNER JOIN
sentence_relationship sr
ON sr.sentence_id = a.id INNER JOIN
sentence b
ON b.id = sr.translation_id AND a.id = sr.sentence_id INNER JOIN
users as u
ON u.id = a.user_id
GROUP BY a.id;
Это предполагает, что все стыки делают работу и матч записи. Если соединения используются для фильтрации, вы можете получить менее 10 строк назад.
Вы всегда можете получить идентификаторы в виде отдельного запроса. – mpen
Да, я мог бы, но я хочу сделать все в одном запросе. –