이 스레드를 발견 : Finding all parents in mysql table with single query (Recursive Query). 어떻게 내가 easly 단일 아이의 모든 부모를 찾을 수 있습니다 설명합니다.단일 쿼리를 사용하는 여러 자녀를위한 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;
미리 감사드립니다. 내가 충분히 밝혀지지 않았다 및
편집 때문에 가능한 한 많은 예제를 단순화, 그래서 내가 정말 필요의 중요한 부분 놓친 : 내가 찾아야하는 것은 어떤 부모가
입니다 관련 테이블에 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)로 정렬 한 기사를 나열한 다음 이름으로 나열하고 싶습니다. '플래그'열은 기사와 관련된 카테고리 또는 카테고리와 관련된 부모 중 하나가 true로 설정된 경우 true와 같아야합니다. 예 결과 :
articles
id | name | flag
1 | aaa | true
5 | ccc | true
2 | hhh | true
3 | bbb | false
4 | zzz | false
나는 정렬 파괴하지 않고 제한 및 오프셋을 적용하는 하나 개의 쿼리에서이 작업을 수행해야합니다.
이 내 질문에 대한 좋은 답변이 있지만 내가 무엇을 찾고되지 않습니다. 나는 충분히 명확하지 않은 질문 원인을 업데이트 할 것이다. 어쨌든 당신의 대답은 thx입니다. – SZMER