2011-09-01 83 views
0

我有一张发票表,其中包含发送发票的用户(from_id)和收到发票的用户(to_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' 

回答

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' 
+0

当我运行这个查询时,我只得到display_name的结果。 – bigmike7801

+0

我添加了tp.display_name AS to_name,fp.display_name AS from_name,这看起来有诀窍;) – bigmike7801

+0

你是对的。我编辑了代码。 – GolezTrol

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'