2012-10-26 25 views
1

项和图像,并已想尽办法,我能找到加盟他们得到以下结果加入2个MySQL表,并生成一个数组

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" 
     } 
     } 
    } 

谢谢!

+0

你试过了什么?你正在使用什么类型的SQL查询,然后你在PHP端做什么? (试图找出你是否有SQL问题或PHP问题) –

回答

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 
} 

这应该大约为你做,但你可能需要修改一些东西。

+2

谢谢,这很好用一个小的tweek:$ query =“ SELECT * FROM entries INNER JOIN images ON ON images.entry_id = entries.entry_id ”; \t \t \t \t $ result = mysql_query($ query)or die(mysql_error()); \t \t \t \t \t $ entries = array(); ($ row = mysql_fetch_assoc($ result)){if(!isset($ entries [$ row ['entry_id']])){row ['images'] = array(); $ entries [$ row ['entry_id']] = $ row; } $ entries [$ row ['entry_id']] ['images'] [] = $ row ['image_url']; } –

+0

好 - 你应该接受答案,然后如果它为你工作。 – Michael

+0

对不起,在当时没有足够的代表接受。 –

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 
0

对于显示器阵列一样,你不能使用加入,试试这个:

  1. 表条目选择所有数据
  2. 的foreach表项时的foreach包括表图像

例如:

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

$ entries = array(); $ images = array();

而($条目= 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, 
); 

}

回声预>';的var_dump($条目);