如何从一个查询中提取多个用​​户信息?

时间:2011-09-01 22:19:51

标签: mysql sql database orm

我有一张发票表,其中包含发送发票的用户(from_id)和收到发票的用户(to_id)的ID。

我希望能够从个人资料表中提取他们的信息,但我无法弄清楚如何。

下面是我正在运行的查询,让我为一个用户(from_id)提取信息,因为加入了。

SELECT jobs.title, profiles.display_name, invoice.to_id, invoice.from_id, invoice.amount
FROM (invoice) 
JOIN jobs ON jobs.job_id = invoice.job_id 
JOIN profiles ON invoice.from_id = profiles.user_id 
WHERE `invoice_id` = '3'

2 个答案:

答案 0 :(得分:3)

您可以使用同一个表两次。给他们不同的别名,我认为无论如何都会使查询更具可读性。

SELECT 
  j.title, 
  tp.display_name as to_name, fp.display_name as from_name, 
  i.to_id, i.from_id, 
  i.amount
FROM 
  invoice i
  JOIN jobs j ON j.job_id = i.job_id 
  JOIN profiles fp ON i.from_id = fp.user_id 
  JOIN profiles tp ON i.to_id = tp.user_id 
WHERE 
  i.invoice_id= '3'

答案 1 :(得分:2)

您可以多次加入桌子 - 在这种情况下,您需要加入profiles表两次 - 一次获取有关发票来自的信息,一次获取有关用户的信息发票被发送到。

SELECT jobs.title
    , Profile_From.display_name AS [From]
    , Profile_To.display_name AS [To]
    , invoice.to_id
    , invoice.from_id
    , invoice.amount
FROM invoice 
JOIN jobs 
    ON jobs.job_id = invoice.job_id 
JOIN profiles Profile_From
    ON invoice.from_id = Profile_From.user_id 
-- You are just missing this part
JOIN profiles Profile_To
    ON invoice.to_id = Profile_To.user_id 
WHERE invoice_id= '3'