2011-11-20 83 views
1

我有這樣的查詢使用UNION:MySQL的UNION查詢分離

$this->db->query(' 
     SELECT DISTINCT users.user_pic, users.id, users.username, contacts.accepted 
     FROM users 
     LEFT JOIN contacts ON users.id = contacts.user_1 
     WHERE contacts.user_2 = ' . $this->session->userdata('user_id') . ' 
     UNION DISTINCT 
     SELECT DISTINCT users.user_pic, users.id, users.username, contacts.accepted 
     FROM users 
     LEFT JOIN contacts ON users.id = contacts.user_2 
     WHERE user_1 = ' . $this->session->userdata('user_id') 
); 

有沒有辦法,看看會議「USER_ID」在contacts.user_1contacts.user_2遇到?也許通過改變查詢,或者如果我可以使用一些如果聲明在視圖中?

在此先感謝

喬治

+0

爲什麼你不做兩個單獨的查詢?天哪,爲什麼每個人都如此癡迷於將一切*推到一個查詢中? – NullUserException

回答

2

是的,你可以添加一個字段來選擇,你可以識別像(1,2)

$this->db->query(' 
     SELECT 1 as table_id,DISTINCT users.user_pic, users.id, users.username, contacts.accepted 
     FROM users 
     LEFT JOIN contacts ON users.id = contacts.user_1 
     WHERE contacts.user_2 = ' . $this->session->userdata('user_id') . ' 
     UNION DISTINCT 
     SELECT 2 as table_id,DISTINCT users.user_pic, users.id, users.username, contacts.accepted 
     FROM users 
     LEFT JOIN contacts ON users.id = contacts.user_2 
     WHERE user_1 = ' . $this->session->userdata('user_id') 
); 
+0

+1良好的獨奏,一個別名(如「table_id」)將使這個查詢更加可用。 –

+0

必須將語法更改爲SELECT DISTINCT 1作爲table_id。它完美的作品。感謝您的快速回答:)喬治 – georgesamper

1

我通常使用:

$ id = $ this-> session-> userdata('user_id');

然後在查詢中使用$ id。至少讀取清理和MySQL,如果查詢失敗,它會列出$ id的值。從未嘗試過在查詢中調用會話。

+0

是的,當然清潔劑,稍後做清潔;) – georgesamper