mysql如何将mysql_fech_array和mysql查询到数组中

时间:2013-11-30 19:33:12

标签: php mysql

有没有办法在mysql中执行此操作?

2桌

Hotel
id   name
1   Hotel 1


Pickup
id_hotel pickup_name pickup_time
1         Hotel_1a      09:20
1         Hotel_1b      14:20

当我做一个JOIN时它会抛出两行。

id  name    id_hotel pickup_name pickup_time
1  Hotel 1     1       Hotel_1a      09:20
2  Hotel 1     1       Hotel_2a      14:20

当我制作mysql_fetch_array时,它会让我这样:

[0] => { id=>1, name=>Hotel 1,id_hotel=>1, pickup_name=>Hotel_1a, pickup_time=>09:20}
[1] => { id=>1, name=>Hotel 1,id_hotel=>1, pickup_name=>Hotel_1b, pickup_time=>14:20}

我想知道我是否可以使用数组。

类似的东西:

[0] => { id=>1, 
         name=>Hotel 1,
         id_hotel=>1, 
         pickup_name=>Hotel_1a, 
         pickup_time=>array{
                            [0]=>09:20
                            [1]=>14:20
                      }

谢谢!

3 个答案:

答案 0 :(得分:1)

没有。你有两条记录。 您需要手动构建阵列。

循环记录并通过传输ID开始新的arrayindex。

在查询中使用order by-clause

SELECT .... order by id

在PHP中:

$myArray = null;
$index   = -1;
$lastID  = null;
//Loop
    if( $record[ 'id' ] !== $lastId ){
        $lastID = $record['id'];
        $index++;
        $myArray[ $index ] [ 'id' ]       = $record[ 'id' ];
        $myArray[ $index ] [ 'name' ]     = $record[ 'name' ];
        $myArray[ $index ] [ 'id_hotel' ] = $record[ 'id_hotel' ];
        //...
        $myArray[ $index ] ['pickup_time'] = array();
    }
    $myArray[ $index ] ['pickup_time'] = array_push( $record[ 'pickup_time' ] );
//loop-end

答案 1 :(得分:1)

不,单靠MySQL就无法做到这一点。

你有三种方法可以解决这个问题:

  1. 查询第一张表&然后通过查询第二个表
  2. 来构建pickup_time字段
  3. 像现在这样使用JOIN&根据JOIN
  4. 的结果构建数组
  5. 使用DoctrinePropel
  6. 等ORM

    #1最简单的没有抽象,但如果你在两个表中都有很多记录要搜索,效率最低。

    #2可能是最有效的,因为在PHP中处理几个循环比对数据库执行I / O更快

    #3更复杂,因为你必须学习ORM,但它会带来更易于维护的代码。

答案 2 :(得分:1)

您可以对它进行GROUP CONCAT然后使用explode。

希望这有帮助。