2016-10-10 5 views
0

У меня есть две таблицы, одна является category таблица с полями, какMultiple Регистрация на той же колонке

id , name, created_by, created_date, modify_by, modify_date, status 

(обратите внимание CREATED_BY & modify_by будут иметь идентификаторы пользователей из таблицы пользователя)

и другие таблицы user с колонками как

id, name, role and many more 

Я должен указать категорию на веб-странице с именами тех пользователей, которые создали новую категории, а также те, кто изменил категорию

Я использую следующий SQL запрос, чтобы получить CREATED_BY имя пользователя, а также modify_by имя пользователя для отображения в лист

BEGIN 
    SELECT cat.id,cat.name, cate.name as parentname, cat.parent_id, 
    cat.created_by, cat.created_date, cat.modify_by, cat.modify_date, 
    user.firstname 
    FROM `category`as cat  
    INNER JOIN `user` ON cat.created_by = user.id 
    LEFT JOIN category as cate ON cate.id = cat.parent_id; 
END 

Что я должен добавить этот запрос, чтобы получить amemodifier пользователя n из своего идентификатора, который может отличаться от идентификатора создателя?

Или мне нужно написать отдельный запрос для получения имени модификатора?

+0

Исправьте форматирование. –

+3

Какая СУБД вы используете? –

ответ

0

Если не ошибаюсь, вы должны присоединиться USER таблицу дважды

SELECT cat.id, 
     cat.NAME, 
     cat.NAME AS parentname, 
     cat.parent_id, 
     cat.created_by, 
     cat.created_date, 
     cat.modify_by, 
     cat.modify_date, 
     c.firstname AS created_user, 
     m.firstname AS modified_user 
FROM categoryas cat 
     LEFT JOIN USER c 
       ON cat.created_by = c.id 
     LEFT JOIN USER m 
       ON cat.modify_by = m.id; 

Если created_by колонка никогда не будет NULL, то вы можете изменить LEFT JOIN USER c к INNER JOIN USER c

+0

Это сработало Спасибо вам каждый – Learner

0

Просто добавьте еще одно соединение пользователя с другим псевдонимом таблицы.

SELECT cat.id,cat.name, cate.name as parentname, cat.parent_id, 
cat.created_by, cat.created_date, cat.modify_by, cat.modify_date, 
creator.firstname creator_name, midifier.firstname modifier_name FROM 
categoryas cat INNER JOIN user creator ON 
cat.created_by = creator.id 
INNER JOIN user midifier ON 
cat.modify_by = midifier.id 
LEFT JOIN category as cate ON cate.id = cat.parent_id; 
+0

no it wont work Я попробовал это перед публикацией здесь; Затем он дает только один список категорий, которые тоже имеют тот же результат, что и раньше. – Learner

+0

@Humbledust Поддерживает ли 'modify_by' все идентификаторы модификатора? как '1,2,3'? – amow

+0

он просто хранит идентификатор пользователя, который зарегистрировался в учетной записи в момент изменения; ID передается с использованием сеанса со скрытым полем – Learner

0

Вам нужны два соединения с этой таблицей с различными псевдонимами.

BEGIN 
    SELECT cat.id,cat.name, cate.name as parentname, cat.parent_id, 
    cat.created_by, cat.created_date, cat.modify_by, cat.modify_date, 
    user.firstname, modifiedUser.firstname as modifiedUser 
    FROM `category`as cat 
    INNER JOIN `user` ON cat.created_by = user.id 
    LEFT JOIN category as cate ON cate.id = cat.parent_id; 
    JOIN `user`modifiedUser ON cate.modify_by = user.id 
END 
Смежные вопросы