0

クエリの結果を配列に取得する方法と、結果をそれぞれ比較して 1 つの配列にマージする必要があります。

私は 3 つのクエリを持っています。コーディングの何が問題なのかわかりません。最善を尽くしただけでは不十分なので、特に SQL と php の専門家を助けてください。

ここに私のコードがあります:

        <?php
        $a = $p['id'];
        $query1 = mysql_query("SELECT id FROM prereservation where '$arrival' BETWEEN arrival and departure and room_id ='$a' and status = 'active'");
        $rows1 = mysql_fetch_array($query1);  

        $query2 = mysql_query("SELECT id FROM prereservation where '$departure' BETWEEN arrival and departure and room_id ='$a' and status = 'active'");
        $rows2 = mysql_fetch_array($query2);

        $query3 = mysql_query("SELECT id FROM prereservation where arrival > '$arrival' and departure < '$departure' and room_id ='$a' and status = 'active'");
        $rows3 = mysql_fetch_array($query3);

        $sample = array_unique(array_merge($rows1, $rows2, $rows3));             
        ?> 

表示は次のようになります。

        <select id="select" name="qty[]" style=" width:50px;" onchange="checkall()">
        <option value="0"></option>
        <? $counter = 1; ?>
        <? while ($counter <= ($p['qty']) - $????????) { ?>
        <option value="<?php echo $counter ?>"><?php echo $counter ?></option>
        <? $counter++;
        }?>
        </select>

たとえば、出力は次のようになります。

$rows1 = array(id= 48, 55, 51, 53)
$rows2 = array(id= 48, 49, 51, 52)
$rows3 = array(id= 48, 49, 50, 51)
$sample = array_unique(array_merge($rows1, $rows2, $rows3))

したがって、サンプルの出力は次のようになります。

$sample = array(id= 48, 49, 50, 51, 52, 53)

テーブル prereservation の列は、' id '、' arrival ' 、' department '、 ' room_id '、 ' qty '、 ' status ' です。

私のテーブルの事前予約では、各IDの*数量*が異なるため、次のようなサンプルの各IDの数量の合計が必要です。

    id    |   qty
    48    |    2
    49    |    1
    50    |    1
    51    |    3   
    52    |    1
    53    |    3  


$total = sum(qty); which is 11

idごとにこれらの数量の合計を取得するクエリを作成する方法を教えてください。また、クエリごとにエラーがあることがわかっているため、最初の3 つのクエリを確認してください。array_mergearray_uniqueを取得します。どうもありがとうございました。

            <select id="select" name="qty[]" style=" width:50px;" onchange="checkall()">
            <option value="0"></option>
            <? $counter = 1; ?>
            <? while ($counter <= ($p['qty']) - $total) { ?>
            <option value="<?php echo $counter ?>"><?php echo $counter ?></option>
            <? $counter++;
            }?>
            </select>

ここに私のデータベース:

table rooms
id |  type   |  qty
---|---------|-----
11 | single  |  50
12 | double  |  50
13 | deluxe  |  20

table preservation
id |   arrival   |  departure  | room_id | qty | status
---|-------------|-------------|---------|-----|-------
48 | 05/11/2012  | 11/11/2012  |    11   |  2  | active 
49 | 06/11/2012  | 11/11/2012  |    11   |  1  | active 
50 | 06/11/2012  | 08/11/2012  |    11   |  1  | active 
51 | 05/11/2012  | 07/11/2012  |    11   |  3  | active 
52 | 06/11/2012  | 09/11/2012  |    11   |  1  | active 
53 | 07/11/2012  | 07/11/2012  |    11   |  3  | active 

私のディスプレイでは、テーブルルーム(id = 11)から選択タグがあり、オプションはqtyであり、テーブル保存(room_id = 11)からqtyの合計によって差し引かれます

4

1 に答える 1

0

選択には 1 つの SQL ステートメントを使用します。

"SELECT id, SUM(qty) FROM prereservation GROUP BY qty WHERE ( ( '$arrival' BETWEEN arrival and departure and room_id ='$a' ) OR ( '$departure' BETWEEN arrival and departure and room_id ='$a' ) OR ( arrival > '$arrival' and departure < '$departure' and room_id ='$a' ) ) AND status = 'active'";

編集:

このようなものはどうですか?

SELECT *, (SELECT SUM(preservation.qty) as sum FROM preservation WHERE rooms.id = preservation.room_id GROUP BY preservation.room_id ) as qty_reserved, rooms.qty - (SELECT SUM(preservation.qty) as sum FROM preservation WHERE rooms.id = preservation.room_id GROUP BY preservation.room_id ) as qty_available  FROM rooms;

一度データベースにアクセスして、必要なすべての情報を取得し、それをアプリケーション全体で再利用する方がはるかに効率的です。これらの変数を表示するだけであれば、php にロジックは必要ありません。

于 2012-11-02T02:07:34.583 に答える