2013-10-01 1 views
2

У меня есть две таблицы: одна со всеми пользовательскими данными и одна с некоторыми заказами. заказ всегда для одного пользователя, но сделанный от другого пользователя (пользователь не может заказать для себя)MYSQL: объединение нескольких таблиц - замена нескольких идентификаторов пользователя с именами пользователей

в таблице заказов редактор и пользователь хранятся только с их идентификатором, соответствующим таблице пользователя.

здесь сокращенные таблицы:

`orders` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `user_id` int(10) NOT NULL, 
    `editor_id` int(10) NOT NULL, 
    `reason` char(200) COLLATE utf8_unicode_ci NOT NULL, 
    `amount` decimal(10,2) NOT NULL 
) 

`users` (
    `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, 
    `name` char(250) COLLATE utf8_unicode_ci NOT NULL DEFAULT '', 
    `password` varchar(32) COLLATE utf8_unicode_ci NOT NULL DEFAULT '', 
    `email` varchar(250) COLLATE utf8_unicode_ci NOT NULL DEFAULT '' 
) 

я хочу запросить один из заказов, и получить user_id заменены user_name и editor_id также заменены с правильным именем из таблицы пользователей. это то, что нормальные заказы результат запроса выглядит следующим образом:

[0] => Array 
     (
      [id] => 714 
      [user_id] => 97 
      [editor_id] => 45 
      [reason] => Ausgaben Regale 28.09.13 
      [amount] => 150.00 
     ) 

и это то, что я хочу:

[0] => Array 
     (
      [id] => 714 
      [user_id] => 97 
      [editor_id] => 45 
      [user_name] => the user name 
      [editor_name] => the editor name 
      [reason] => Ausgaben Regale 28.09.13 
      [amount] => 150.00 
     ) 

Я попытался так много различных соединений, но все без успеха, очень хотелось бы получите подсказку, указывающую на меня в правильном направлении.

+1

Вы можете поместить в один из запросов с помощью объединений, которые вы пробовали? Вам нужно дважды присоединяться к «заказам» к «пользователям» - один раз для идентификатора пользователя и один раз для идентификатора редактора – InSane

ответ

1

Это?

SELECT o.id, o.user_id, o.editor_id, u1.name as user_name, u2.name as editor_name, 
o.reason, o.amount 
FROM orders o 
INNER JOIN users u1 ON o.user_id = u1.id 
INNER JOIN users u2 ON o.editor_id = u2.id 
WHERE o.id = "requested order id" 
0
SELECT orders.*,user.name as user_name,editor.name as editor_name FROM orders 
inner join users user on orders.user_id=user.id 
inner join users editor on orders.editor_id=editor.id where orders.id="requested id" 
Смежные вопросы