2010-11-30 44 views
0

情況: 2個表,第一個(人)存儲人名和一些其他數據,第二個(電話)存儲他們的電話號碼。每個人可以有多個電話號碼(這就是爲什麼我首先使用單獨的表格)。mysql最快的2表查詢

目標:選擇一切都那麼,到底我有一個PHP數組是這樣的:

array 
(
'0' => array 
     (
     'name' => 'John Smith' 
     // other values from table Persons... 
     'Phones' => array('0' => '12345', '1' => '324343') // from Phones table 

     ), 
'1' => array 
     (
     'name' => 'Adam Smith' 
     // other values from table Persons... 
     'Phones' => array('0' => '645646', '1' => '304957389', '2' => '9435798') // from Phones table 

     ) 
); 

ETC.

Phones.person_id = Persons.id

什麼是做到這一點的最快方法?程序執行時間意義上最快,而不是編碼時間。我可以做簡單的JOIN,但在這種情況下,我會得到許多重複的行,即每個手機,如果你明白我的意思,我會在每一行中一次又一次地獲得同一人的所有數據。所以我需要在PHP端處理數組。也許有更好的方法?

回答

0

先獲取該人,然後查詢每個電話號碼。

$return = array(); 
$query = "SELECT `id`, `name` FROM `Persons`"; 
$person_results = mysql_query($query); 
if($person_results && mysql_num_rows($person_results)) { 
    while($person_row = mysql_fetch_assoc($person_results)) { 
    $person = array(); 
    $person['name'] = $person_row['name']; 
    $person['phone'] = array(); 
    $query = "SELECT `number` FROM `Phones` WHERE `person_id` = '{$person_row['id']}'"; 
    $phone_results = mysql_query($query); 
    if($phone_results && mysql_num_rows($phone_results)) { 
     while($phone_row = mysql_fetch_assoc($phone_results)) { 
     array_push($person['phone'], $phone_row['number']); 
     } 
    } 
    } 
} 
return $return; 
+0

我非常懷疑這比做一個sql查詢更快,然後在php中重新排列數組。 – chris 2010-11-30 22:10:46

1

一個查詢。檢查輸入錯誤:

$return = array(); 
$query = "SELECT pe.id, pe.name, ph.phone FROM Persons pe INNER JOIN phones ph ON pe.id = ph.person_id "; 
$results = mysql_query($query); 
if($results && mysql_num_rows($results)) { 
    while($row = mysql_fetch_assoc($results)) { 
     if(!$return[$row['id']]) { 
      $return[$row['id']] = array('name' => $row['name'], 'Phones' => array()); 
     } 
     array_push($return[$row['id']]['Phones'], $row['phone']); 
    } 
}   
return $return;