2013-03-03 109 views
0

在本聲明中,我的一些數據沒有出來。具體那些retaurant_id = 0。是因爲,它與我的entry_id沒什麼可比的嗎?如何從MySQL語句中獲取所有數據?

MySQL的

"SELECT em.*, t.*, cd.*, ct.*, emd.* 
FROM exp_members as em 
Inner JOIN transactions as t on (em.member_id = t.cardid-10000000) 
Inner JOIN exp_channel_titles as ct on (t.restaurant_id = ct.entry_id) 
Inner JOIN exp_channel_data as cd on (ct.entry_id = cd.entry_id) 
inner join exp_member_data as emd on em.member_id = emd.member_id 
WHERE em.member_id = '".$_GET['cardid']."'" 

電流輸出

Rest_navn City  Postcode 
San Remo Roskilde 4000  

所需的輸出

TransID Rest_navn City   Postcode 
4214  San Remo  Roskilde  4000 
4212  0   0    0 
4211  0   0    0 

屁股,你可以看到有更多的數據必須出來;但它不會出來。

我已經嘗試更改where聲明,但沒有任何發生。

我的一些數據沒有出現在這個聲明中。具體那些retaurant_id = 0

是因爲t.restaurant_id = null在這一行嗎?

Inner JOIN exp_channel_titles as ct on (t.restaurant_id = ct.entry_id) 

它和我的entry_id沒什麼可比的嗎?

+0

嘗試左加入,看看你是否得到輸出 – DevelopmentIsMyPassion 2013-03-03 21:37:02

回答

1

聽起來像是你需要使用一個LEFT JOIN - 它不會返回0,但將返回NULL - 您可以使用IFNULLCOALESCE返回0,如果需要:

"SELECT em.*, t.*, cd.*, ct.*, emd.* 
FROM exp_members as em 
    LEFT JOIN transactions as t on (em.member_id = t.cardid-10000000) 
    LEFT JOIN exp_channel_titles as ct on (t.restaurant_id = ct.entry_id) 
    LEFT JOIN exp_channel_data as cd on (ct.entry_id = cd.entry_id) 
    LEFT join exp_member_data as emd on em.member_id = emd.member_id 
WHERE em.member_id = '".$_GET['cardid']."'" 

要獲得0作爲值而不是NULL,這樣的事情應該幫助(不知道你的表結構)

SELECT COALESCE(Rest_navn,'0') 
+0

當然,謝謝@sgeddes。它現在工作正常,我會在11分鐘內接受你的答案 – Zaz 2013-03-03 21:38:35

+0

@Zaz - np,很高興我能幫上忙。 – sgeddes 2013-03-03 21:39:30

+0

請注意,當您確實表示'null'時返回'0'通常是一個可怕的想法。 :P通常當你覺得需要這樣做時,你真正需要的是正確處理你的數據。 – cHao 2013-03-03 21:39:37

1

我想你想的外連接,從交易表:

SELECT em.*, t.*, cd.*, ct.*, emd.* 
FROM transactions as t 
    left outer JOIN exp_members as em on (em.member_id = t.cardid-10000000) 
    left outer JOIN exp_channel_titles as ct on (t.restaurant_id = ct.entry_id) 
    left outer JOIN exp_channel_data as cd on (ct.entry_id = cd.entry_id) 
    left outer join exp_member_data as emd on em.member_id = emd.member_id 
WHERE em.member_id = '".$_GET['cardid']."'" 

transactionsexp_members之間的第一個連接可以寫爲內連接,因爲where子句將消除外連接帶入的額外記錄。不過,我認爲保持所有連接相同,並從表中開始,希望所有記錄都是最安全的方法。

相關問題