2011-05-29 73 views
1

所以我在寫這句話時真的很糟糕,所以請耐心等待。MySQL查詢在哪裏添加多條記錄到一條記錄

我正在建立一個網站,人們可以爲孩子購買禮物,每個孩子可以在他們的列表中有多個禮物。

我有兩個表childrengift_list。這些表是非常基本具有以下行:

children 
    - id 
    - name 
    - age 
    - status 

gift_list 
    - id 
    - child_id 
    - description 
    - status 

我試圖抓住屬於一個孩子,並返回它們作爲孩子的數組對象的所有禮物,但我發現了奇怪的結果。

這裏是我當前的SQL語句:

SELECT * FROM children JOIN gift_list WHERE gift_list.child_id = children.id 

結果是:

Child A: 
    - id 
    - name 
    - age 
    - status 
    - gift A 

Child A: 
    - id 
    - name 
    - age 
    - status 
    - gift B 

我知道我需要通過gift_list表圈,然後將它們添加到一個數組,但我MySQL是新手,我迷失在這個概念之中,無法想象如何正確搜索我想要完成的任務。想法最終結果將是:

Child A: 
    - id 
    - name 
    - age 
    - status 
    - gifts 
    - gift A 
     - description 
     - status 
    - gift B 
     - description 
     - status 

任何幫助將不勝感激!作爲一個方面的說明,可能很重要,我使用PHP框架CodeIgniter。

編輯:

使用下面的建議,我終於得到了下面的代碼工作幾次失敗的嘗試後......有可能是如果是這樣,請線索我做這件事......更好/更清潔的方式在:)

$children = $this->db->get('children'); 
$gift_list = $this->db->get('gift_list'); 

foreach ($children->result() as $child) 
{ 
    $gifts = array(); 
    foreach ($gift_list->result() as $gift) 
    { 
     if ($child->id == $gift->children_id) 
     { 
      array_push($gifts, $gift); 
      $child->gifts = $gifts; 
     } 
    } 
} 

echo "<pre>"; 
print_r($children->result()); 
echo "</pre>"; 

感謝您的所有建議!

回答

0

你說你得到奇怪的結果,但不是那些結果是什麼。如果您以某種方式遍歷查詢的結果,也許您需要訂購結果?添加像

ORDER BY children.id, gift.id 

到最後,也許。

3

您需要執行2個不同的查詢。第一個讓孩子們,第二個獲得他們的禮物。第一個查詢的

例子:

SELECT * FROM children WHERE ... any children-related criteria here ... 

您現在應該有陣列(沒有任何禮物尚未):

Child A: 
    - id (let's say this equals 1) 
    - name 
    - age 
    - status 

Child A: 
    - id (let's say this equals 2) 
    - name 
    - age 
    - status 

是該數組的鍵是孩子們的ID是很重要的(以及至少它會讓事情變得更簡單)。

使用陣列,構建以下查詢:

SELECT * FROM gift_list WHERE child_id IN (1, 2); 

,你可以使用像做:

$gifts_sql = 'SELECT * FROM gift_list WHERE child_id IN (' . implode(', ', array_keys($children)) . ')'; 

您現在應該遍歷該查詢的結果,並附上這樣說,這:

while ($row = mysql_fetch_assoc($result)) { 
    $children[$row['child_id']]['gifts][$row['gift_id']] = $row; 
} 

您的$children數組現在應該看起來像您想要的樣子是。

+0

當我從早餐回來時,我會嘗試這個嘗試!謝謝! – Seth 2011-05-29 14:30:09

+0

我用完成我所尋找的代碼更新了我的問題。感謝您的建議。我遇到了while循環的問題,而WHERE IN語句最終返回了與SELECT * FROM gift_list相同的結果。 – Seth 2011-05-29 17:51:32