0

2 つのテーブルがあるとします。

Table1 (オブジェクトあり):

| object_id                          | int(11)       | NO   | PRI | NULL         | 
| owner_of_object_id                 | int(11)       | NO   | PRI | NULL         | 

表2 (スケジュール付き):

| object_id                          | int(11)       | NO   | PRI | NULL         | 
| reserved_from_date                 | date          | NO   | PRI | NULL         | 
| reserved_to_date                   | date          | NO   | PRI | NULL         | 
| reserved_to_id                     | int(11)       | NO   | PRI | NULL         | 

最初のテーブルは鉱山オブジェクトを定義し、固有のオブジェクトのみがあり、2 番目のテーブルはオブジェクトのスケジュールを定義します。オブジェクトは異なる日付にスケジュールできます。つまり、object_id が 1 つでも日付が異なるレコードが存在する可能性があります。

その方法でこれらのテーブルからデータを選択したい:

Array ( [0] => Array ( [object_id] = xxx, [reservations] = array( ALL RESERVATIONS ) ), [1] => next object) etc etc

それを照会する方法は?

4

1 に答える 1

0

希望するレコードを選択することはできません。SQLは1レベルの配列を返しますが、マルチレベルの配列を返すようにすることはできないと思います。あなたができることは、あなたが望むものを得るために記録を取得し、それらを処理することです。
コマンドを実行して、2番目のテーブルからすべてを選択する必要があります(結合は必要ありません)。次に、次のようにします。

$current_id = 0; $counter = 0;
foreach($records as $record) {
    //if this is not the first run and the current id is different then the db id then you should add this to your results array
    if($record->object_id != $current_id && $counter) {
        $results[] = array('object_id' => $current_id, 'reservations' => $_tmp_array);
        $_tmp_array = array();
    }
    $_tmp_array[] = $record;
    $counter++;
}
//final add to the results array
$results[] = array('object_id' => $current_id, 'reservations' => $_tmp_array);
于 2012-12-27T01:55:07.817 に答える