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 が返されます。必要に応じてIFNULLorを使用COALESCEして 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']."'"

NULL の代わりに値として 0 を取得するには、このようなものが役立ちます (テーブル構造についてはわかりません)。

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']."'"

transactionsとの間の最初の結合はexp_members、内部結合として記述することができます。これは、where句が外部結合によって取り込まれた余分なレコードを排除するためです。ただし、すべての結合を同じに保ち、すべてのレコードが必要なテーブルから始めるのが最も安全な方法だと思います。

于 2013-03-03T21:37:08.560 に答える