1

pubs というテーブルにリンクしているすべてのデータからデータを取得したい 5 つのテーブルがあります。

special_offers にはパブ イベントに関連する 3 つのレコードがあります パブに関連する 4 つのレコードがあります

ただし、最初のイベントと special_offers しか返されません。マルチレベル配列に構造化されていないようです。結合と内部結合を試みましたが、何が問題なのかわかりません。

SELECT pubs.*, special_offers.*, `events`.*, vote.* 
  FROM pubs
    Inner Join `events` 
      ON pubs.id = `events`.pubID
    Inner Join special_offers 
      ON pubs.id = special_offers.pubID
    Inner Join vote 
      ON pubs.id = vote.pubID
  WHERE pubs.id = 48

これがprint_rの出力です

Array (
 [0] => 48
 [id] => 1 Harveys
 [name] => Harveys
 [sun] => 10am-2.30am
 [31] => 1
 [32] => 4
 [special_dayID] => 4
 [33] => 48
 [pubID] => 48
 [34] => 2.50 Drinks
 [title] => Kodakid
 [35] => All drink 2.50 get them while there hot! or cold!
 [desc] => Kodakid are playing!
 [36] => 1
 [37] => 48
 [38] => 2012-04-30
 [date] => 2012-04-30
 [39] => Kodakid
 [40] => & others
 [subtitle] => & others
 [41] => Kodakid are playing!
 [42] => kodakid.jpg
 [img] => kodakid.jpg
 [43] => 1
 [44] => 48
 [45] => 3
 [price_range] => 3
 [46] => 5
 [atmosphere] => 5
 [47] => 2
 [food] => 2
 [48] => 4
 [service] => 4
 [49] => 3
 [value] => 3
 [50] => Waterford City
 [county] => Waterford City )

ありがとう

4

1 に答える 1

1

実際のクエリはどのように行っていますか? MySQL は、ネストされた配列または行をサポートしていません。結果セットは 0 個以上の行で構成され、各行は 1 つ以上の数値、文字列、日付などです。

あなたがしているのは、4 つのテーブルすべてのすべての列で構成される結果セットを要求することです。INNER 結合を使用しているため、4 つのテーブルすべてに存在する行のみを返すように MySQL に要求しています。pubsしたがって、関連付けられた行を持たないID はevents、他の 2 つの行があったとしても、結果セットに含まれません。

求めていることを行うには、個別のクエリを使用できます (イベント用、投票用など)。また、INNER JOIN の代わりに LEFT JOIN を使用したり、GROUP_CONCAT のようなサブクエリやアグリゲーターを使用したりすることもできますが、実際には、情報をどう処理するかによって異なります。

于 2012-04-20T16:13:32.740 に答える