Каким образом можно извлечь два уровня родительских элементов одновременно с использованием одного запроса?

Как можно проверить, является ли заданный referer_id потомком кого-то в таблице, и если да, то является ли родитель в свою очередь потомком? Необходимо получить id именно с помощью запроса, который можно будет использовать с PDO, без набора переменных или использования неготовых значений.
  • 1 января 2024 г. 11:37
Ответы на вопрос 2
Для извлечения двух уровней родительских элементов одновременно с использованием одного запроса вам понадобится применить join самой с собой. Например, если у вас есть таблица employees со следующими полями: id, name, manager_id, то можно использовать следующий запрос:

```sql
SELECT e1.name as employee_name, e2.name as manager_name 
FROM employees e1
JOIN employees e2 ON e1.manager_id = e2.id
```

Для проверки, является ли заданный referer_id потомком кого-то в таблице и является ли его родитель в свою очередь потомком, можно использовать следующий запрос:

```sql
SELECT * 
FROM employees 
WHERE id = (
    SELECT manager_id 
    FROM employees 
    WHERE id = [referer_id]
) AND id IN (
    SELECT manager_id 
    FROM employees 
    WHERE id = (
        SELECT manager_id 
        FROM employees 
        WHERE id = [referer_id]
    )
)
```

Здесь [referer_id] - это значение, которое вы хотите проверить.
SELECT `l1`.`referer_id` AS `parent`, `l2`.`referer_id` AS `grandparent`
  FROM `table` AS `l1`
  LEFT JOIN `table` AS `l2` ON `l2`.`referal_id` = `l1`.`referer_id`
  WHERE `l1`.`referal_id` = :referal_id
Похожие вопросы