0

在这份声明中,我的一些数据没有出来。特别是那些在哪里retaurant_id = 0。是因为,在我的身上没有什么可比的entry_id吗?

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?

4

2 回答 2

1

听起来您需要使用 a LEFT JOIN-- 它不会返回 0,但会返回 NULL -- 如果需要,您可以使用IFNULLorCOALESCE返回 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')
于 2013-03-03T21:35:23.213 回答
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']."'"

第一个join, between transactionsandexp_members可以写成inner join,因为这个where子句会消除outer join带来的额外记录。但是,我认为保持所有连接相同并从您想要所有记录的表开始是最安全的方法。

于 2013-03-03T21:37:08.560 回答