mysql最快2表查询

时间:2010-11-30 21:49:03

标签: php 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方面处理数组。也许有更好的方法?

2 个答案:

答案 0 :(得分: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;

答案 1 :(得分: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;