2013-03-03 106 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子句将消除外连接带入的额外记录。不过,我认为保持所有连接相同,并从表中开始,希望所有记录都是最安全的方法。

相关问题