2013-02-10 3 views
12

Я пытаюсь получить некоторые строки из одной таблицы. Это пользовательская таблица: пользователь имеет user_id и user_parent_id.INNER JOIN та же таблица

Мне нужно получить строку user_id и номер user_parent_id. Я закодировал что-то вроде этого:

SELECT user.user_fname, user.user_lname 
FROM users as user 
INNER JOIN users AS parent 
ON parent.user_parent_id = user.user_id 
WHERE user.user_id = $_GET[id] 

Но это не показывает результаты. Я хочу показать запись пользователя и его родительскую запись.

ответ

24

Я думаю, проблема в вашем состоянии JOIN.

SELECT user.user_fname, 
     user.user_lname, 
     parent.user_fname, 
     parent.user_lname 
FROM users AS user 
JOIN users AS parent 
    ON parent.user_id = user.user_parent_id 
WHERE user.user_id = $_GET[id] 

Edit: Вы, вероятно, следует использовать LEFT JOIN, если есть пользователи, не имеющие родителей.

+0

Спасибо всем за ваш вклад .. я на самом деле не имел идентификатор родительского установить во время тестирования, в настоящее время его работы .. один может быть, это поможет кому-то, я сохранял user_parents как TEXT в формате «1,2», поэтому это означает детали из двух пользователей. Поэтому в этом случае мой последний рабочий запрос ниже: $ query = " выберите user.user_fname, user.user_lname, parent.user_lname AS имя_файла, parent.user_fname AS имя_файла из {$ prefix} пользователей как пользователя присоединиться к {$ префикс} в качестве родителя на parent.user_id IN (user.user_parents) где user.user_id = ". $ Id; спасибо все еще раз .. – user1718343

+1

@ user1718343 Никогда никогда ** НИКОГДА ** хранить данные с разделителями, как в столбцах. –

1

Возможно, это должно быть выбором (если я правильно понял вопрос правильно)

select user.user_fname, user.user_lname, parent.user_fname, parent.user_lname 
... As before 
1

Вашего запрос должен работать нормально, но вы должны использовать псевдоним parent показать значение родительской таблицы, как это:

select 
    CONCAT(user.user_fname, ' ', user.user_lname) AS 'User Name', 
    CONCAT(parent.user_fname, ' ', parent.user_lname) AS 'Parent Name' 
from users as user 
inner join users as parent on parent.user_parent_id = user.user_id 
where user.user_id = $_GET[id]; 
1

Вы можете также использовать UNION как

SELECT user_fname , 
     user_lname 
FROM users 
WHERE user_id = $_GET[id] 
UNION 
SELECT user_fname , 
     user_lname 
FROM users 
WHERE user_parent_id = $_GET[id] 
0

Я не знаю, как создается таблица, но попробовать это ...

SELECT users1.user_id, users2.user_parent_id 
FROM users AS users1 
INNER JOIN users AS users2 
ON users1.id = users2.id 
WHERE users1.user_id = users2.user_parent_id 
Смежные вопросы