1

エントリと画像を見つけて、以下の結果を得るためにそれらを結合するために見つけることができるあらゆる方法を試してきました

entries:
entry_id
name

images:
entry_id
image_url

私は php を使用しており、特定の entry_id に関連付けられているすべての image_url 行を取得し、それらをエントリ テーブルの他の情報と結合できるようにしたいと考えています。

だから私は次のようなものを持っています:

entries:
1, Brian
2, Steve
3, Jane

images:
1, images/brian1.jpg
1, images/brian2.jpg
2, images/steve.jpg
3, images/jane_1.jpg
3, images/jane_2.jpg
3, images/jane_3.jpg

そして、次のような配列を取得したい

array(3) {
  [0]=>
    array(3) {
      ["entry_id"]=>
      string(1) "1"
      ["name"]=>
      string(5) "Brian"
      ["images"]=>
        array(2) {
          ["image_url"]=>
          string(17) "images/brian1.jpg"
          ["image_url"]=>
          string(17) "images/brian2.jpg"
        }
      }
  [1]=>
    array(3) {
      ["entry_id"]=>
      string(1) "2"
      ["name"]=>
      string(5) "Steve"
      ["images"]=>
        array(1) {
          ["image_url"]=>
          string(16) "images/steve.jpg"
        }
      }
  [2]=>
    array(3) {
      ["entry_id"]=>
      string(1) "3"
      ["name"]=>
      string(5) "Jane"
      ["images"]=>
        array(3) {
          ["image_url"]=>
          string(18) "images/jane_1.jpg"
          ["image_url"]=>
          string(18) "images/jane_2.jpg"
          ["image_url"]=>
          string(18) "images/jane_3.jpg"
        }
      }
    }

ありがとうございました!

4

4 に答える 4

1

これは何もテストしていませんが、次のようなものが必要だと思います。

SELECT * FROM entries INNER JOIN images ON images.entry_id = entries.entry_id

次に、それらの結果をループします。

$entries = array();

while ($row = mysql_fetch_assoc($data))
{
    if (!isset($entries[$row['entry_id']]))
    {
        $row['images'] = array();
        $entries[$row['entry_id']] = $row;
    }

    $entries[$row['entry_id']]['images'][] = $row['image_url'];
}

次に、このリターンをループできます。

foreach ($entries as $entry)
{
    foreach ($entry['images'] as $image);
    // do something interesting
}

それはあなたのためにそれをするはずですが、いくつかのことを変更する必要があるかもしれません.

于 2012-10-26T01:27:40.827 に答える
0

データベース接続コードを並べ替えましたか?

私はあなたが完全な外側の結合を探していると信じています。さまざまな結合のSQL例については、このリソースを確認してください。

http://www.codeproject.com/Articles/33052/Visual-Representation-of-SQL-Joins

于 2012-10-26T00:30:57.607 に答える
0

簡単な方法はこのようなものです

 select * from entries, images where images.entry_id = entries.entry_id group by entries.entry_y;

参加は次のようになります。

SELECT * FROM entries INNER JOIN images ON images.entry_id = entries.entry_id
于 2012-10-26T00:33:21.307 に答える
0

そのような表示配列の場合、joinを使用することはできません。これを試してください:

  1. テーブルエントリのすべてのデータを選択します
  2. foreachテーブルエントリ、foreachにテーブルイメージが含まれる場合

元:

$ q_e = "SELECT * FROM entries"; $ result_entry = mysql_query($ q_e);

$ items = array(); $ images = array();

while($ entry = mysql_fetch_array($ result_entry)){

  $q_i = "SELECT * FROM `images` WHERE `entry_id` = '".$entry['entry_id']."'";
  $result_image = mysql_query($q_i);

  while($image = mysql_fetch_array($result_image)) {
      $images[] = array(
          'image_url' => $image['image_url']
      );
  }

  $entries[] = array (
      'entry_id' => $entry['entry_id'],
      'name' => $entry['name'],
      'images' => $images,
  );

}

echo'pre>'; var_dump($entries);

于 2012-10-26T01:55:01.097 に答える