Php mysql 2表查询

Php mysql 2表查询,php,mysql,Php,Mysql,情况:2个表,第一个(人员)存储人名和一些其他数据,第二个(电话)存储他们的电话号码。每个人可以有多个电话号码(这就是为什么我首先使用单独的表格) 目标:选择所有内容,以便最终得到如下php数组: array ( '0' => array ( 'name' => 'John Smith' // other values from table Persons... 'Phones' => array('0' =>

情况: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

        )
);
等等

Phones.person\u id=Persons.id


最快的方法是什么?从程序执行时间的意义上讲是最快的,而不是编码时间。我可以做简单的连接,但在这种情况下,我会得到许多重复的行,也就是说,对于每一部手机,我会一次又一次地在每一行中获得同一个人的所有数据,如果你明白我的意思的话。所以我需要在PHP端处理数组。也许有更好的方法吗?

先找到那个人,然后查询每个电话号码

$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;

一个问题。检查打字错误:

$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;

我非常怀疑这是否比执行一个sql查询然后用php对数组进行重新排序快。嗯,谢谢你的回复,但是的,这将是大约100k+mySQL查询,效率非常低。你是对的。我认为联接将起作用,然后您可以通过这种方式对结果进行排序。反复浏览结果。如果名称在缓冲区数组中,请添加数字。如果不是,则将名称添加到缓冲区,然后添加数字。