2013-04-19 4 views
0

Я пытаюсь присоединиться к users_groups из моего основного запроса, но я не могу присоединиться к ним в таблицах с псевдонимом. Пожалуйста, помогите мне. Это приводит к ошибке: Неизвестный столбца «node.id» в «на пункте»MySQL: присоединение к таблицам с псевдонимом

SELECT node.id, node.first_name, node.last_name, (COUNT(parent.id) - (sub_tree.depth +1)) AS depth 
FROM users AS node, users AS parent, users AS sub_parent, (
    SELECT node.id, node.first_name, node.last_name, (COUNT(parent.id) -1) AS depth 
    FROM users AS node, users AS parent 
    WHERE node.lft BETWEEN parent.lft AND parent.rgt 
     AND node.id =1 
    GROUP BY node.id 
    ORDER BY node.lft 
) AS sub_tree 
JOIN users_groups ON users_groups.user_id = node.id 
WHERE node.lft BETWEEN parent.lft AND parent.rgt 
    AND node.lft BETWEEN sub_parent.lft AND sub_parent.rgt 
    AND sub_parent.id = sub_tree.id 
GROUP BY node.id 
ORDER BY node.lft 
LIMIT 0 , 30 
+0

Пожалуйста, узнайте, как правильно использовать 'GROUP BY'. – Kermit

+0

Было бы неплохо иметь ссылку JSFiddle или некоторые команды создания/вставки, чтобы не создавать их повторно. –

ответ

2

Вы должны использовать псевдоним, который дал его ..

JOIN users_groups ON users_groups.user_id = sub_tree.id

+0

спасибо ... :) Я очень слаб, когда дело доходит до таких вещей базы данных, как эти – VeeBee

+2

@VeeBee: хотя псевдоним 'node' внутри запроса' sub_tree' не путается с другим псевдонимом 'node' * по базе данных *, это потенциально сбивает с толку людей. –

3

Форматирование SQL всегда полезно

SELECT 
    node.id, 
    node.first_name, 
    node.last_name, 
    (COUNT(parent.id) - (sub_tree.depth +1)) AS depth 
FROM 
    users AS node, 
    users AS parent, 
    users AS sub_parent, 
    (
    SELECT 
     node.id, 
     node.first_name, 
     node.last_name, 
     (COUNT(parent.id) -1) AS depth 
    FROM 
     users AS node, 
     users AS parent 
    WHERE 
     node.lft BETWEEN parent.lft AND parent.rgt 
     AND node.id =1 
    GROUP BY 
     node.id 
    ORDER BY 
     node.lft 
) AS sub_tree 
    JOIN users_groups ON users_groups.user_id = node.id 
               ^^ should be sub_tree.id 
WHERE 
    node.lft BETWEEN parent.lft AND parent.rgt 
    AND node.lft BETWEEN sub_parent.lft AND sub_parent.rgt 
    AND sub_parent.id = sub_tree.id 
GROUP BY 
    node.id 
ORDER BY 
    node.lft 
LIMIT 0 , 30 
Смежные вопросы