Я нашел эту тему: Finding all parents in mysql table with single query (Recursive Query). В нем описывается, как я могу легко найти всех родителей одного ребенка.Найти всех родителей в таблице mysql для нескольких детей с одним запросом
Мне интересно, могу ли я получить всех родителей для нескольких детей, найденных по запросу.
Например. мы имеем таблицу, как ниже:
table1
--------------------
id | name | parent_id
1 | aaa | null
2 | bbb | 1
3 | bbb | 1
4 | ccc | 3
5 | ccd | 1
И мы хотели бы, чтобы найти все родитель для элементов с именем, которое содержит «CC»
select id from table1 where name like '%cc%';
# ids fetched
# => 4, 5
# parents what we're looking for
# for id = 4 -> 4,3,1 | for 5 -> 5,1
Я пытался что-то вроде этого, но это не сработало :
SELECT T2.id, T2.name, T2.parent_id, T1._id, T1.lvl
FROM (
SELECT
@r AS _id,
(SELECT @r := parent_id FROM table1 WHERE id = _id) AS parent_id,
@l := @l + 1 AS lvl
FROM
(SELECT @r := l.id from table1 l where name like '%cc%') tmp,
table1 t
WHERE @r <> 0) T1
JOIN categories T2
ON T1._id = T2.id;
Заранее благодарен.
Edit, потому что не было достаточно ясным, и я упростил пример как можно больше, так что я пропустил важную часть того, что я на самом деле нужно:
Что мне нужно, чтобы найти это любой родитель связанная таблица имеет флаг, установленный в значение true. У меня есть 3 таблицы:
categories
---------------------
id | name | parent_id | flag
articles
---------------------
id | name
# intersection between categories and related articles
category_articles
---------------------
category_id | article_id
Как вы можете видеть, статьи могут быть несколько категорий. Я хотел бы перечислить статьи, заказанные сначала любым родительским флагом asc (сначала true, false после них), затем по имени. Столбец 'flag' должен быть равен true, если для одной из категорий, связанных со статьей или любым родителем, относящимся к категории, флаг имеет значение true. Пример результата:
articles
id | name | flag
1 | aaa | true
5 | ccc | true
2 | hhh | true
3 | bbb | false
4 | zzz | false
мне нужно сделать это в одном запросе, чтобы применить ограничение и смещение, не нарушая сортировки.
Это хороший ответ на мой вопрос, но это не то, что я ищу. Я буду обновлять вопрос, потому что я не был достаточно ясным. В любом случае, за ваш ответ. – SZMER