2012-12-19 53 views
0

給定用戶名在Drupal 7.17數據庫中使用PostgreSQL 8.4.13我試圖獲取用戶信息(uid,城市,性別,頭像)分佈在幾張桌子上。加入幾個表(獲取用戶信息爲1行),但其中一個是可選的(用戶頭像)

然而,頭像(下面的f.filename)是可選的 - 有些用戶沒有它。

對於用戶來說,這的確有替身我的查詢工作良好:

# select 
     u.uid, 
     /* u.pass, */ 
     f.filename, 
     g.field_gender_value, 
     c.field_city_value 
from 
     drupal_users u, 
     drupal_file_managed f, 
     drupal_field_data_field_gender g, 
     drupal_field_data_field_city c 
where 
     u.name='Alex' and 
     u.picture=f.fid and 
     g.entity_id=u.uid and 
     c.entity_id=u.uid 
; 
uid |   filename   | field_gender_value | field_city_value 
-----+--------------------------+--------------------+------------------ 
    1 | picture-1-1312223092.jpg | Male    | Bochum 
(1 row) 

但是對於用戶來說,沒有分身誰我得到空的結果。

當我省略了drupal_file_managed f表 - 它再次工作:

# select 
     u.uid, 
     /* u.pass, */ 

     g.field_gender_value, 
     c.field_city_value 
from 
     drupal_users u, 

     drupal_field_data_field_gender g, 
     drupal_field_data_field_city c 
where 
     u.name='mvp' and 

     g.entity_id=u.uid and 
     c.entity_id=u.uid 
; 
    uid | field_gender_value | field_city_value 
-------+--------------------+------------------ 
18539 | Male    | Moscow 
(1 row) 

我怎麼能修改我加入語句確保它始終返回1行爲有效用戶 - 無論他們是否有頭像或不?對於後面的情況,f.filename列可以爲空。

我需要left outer join嗎? (我怕它會返回幾行而不是1)。

+0

用戶可以擁有1個分身嗎? –

回答

2

隨着COALESCE(),你甚至可以插上一個默認值,如果文件似乎丟失:

SELECT u.uid AS uid 
     , COALESCE(f.filename, 'goatsex.jpg') AS filename 
     , g.field_gender_value AS gender_value 
     , c.field_city_value AS city_value 
FROM drupal_users u 
JOIN drupal_field_data_field_gender g ON g.entity_id=u.uid 
JOIN drupal_field_data_field_city c ON c.entity_id=u.uid 
LEFT JOIN drupal_file_managed f ON u.picture=f.fid 
WHERE u.name='Alex' 
     ; 
+0

謝謝,真棒 –

2

是的,你想有一個左外連接。只有當用戶擁有多個頭像時,它纔會返回多行,但對於內部連接也是如此。

+0

謝謝!不,他們只能有0或1個頭像。我仍然在努力的語法,雖然...... –

+0

你的語法問題是什麼? 'LEFT JOIN ... ON a = b'。什麼不行? – Thilo

+0

'選擇從.....üdrupal_users LEFT OUTER JOIN drupal_file_managed樓 drupal_field_data_field_gender克, drupal_field_data_field_city C ......'給我語法錯誤,第一個逗號後 –

相關問題