0

だから私はこのクエリを持っています:

SELECT * FROM cars {$statement} AND deleted = 'no' AND carID NOT IN (SELECT carID FROM reservations WHERE startDate = '".$sqlcoldate."') GROUP BY model

基本的に予約テーブルをチェックし、予約がある場合はそれらの carID を取得してループから除外します。

これは素晴らしいことです。ダッジ バイパーが 3 体いて 2 体が予約されている可能性があるため、最後の 1 つだけが表示されます。結果はモデル別にグループ化されているため、一度に 1 つずつしか表示されません。

これで問題ありませんが、エントリがなくなり、すべての車が予約されてしまうと、その車は車のリストに表示されません。(クエリから明らかなように)。

結果に特定の車のモデルの行がない場合に、プレースホルダーを表示して、「利用できない」のようなものを表示する方法が欲しいです。

これはまったく可能ですか?これは主に、会社がその車を所有していることをユーザーが確認できるようにするためですが、その日には利用できないことを知っています。

4

3 に答える 3

0

おそらくPHPでこれを処理し、返される行数を確認し、0を「UNAVAILABLE」に置き換える必要があります。

TOコメントに基づく:

この場合、あなたは見たいです

http://dev.mysql.com/doc/refman/5.1/en/case.html

これは、次のようにSELECTリストに入れる必要があります。

SELECT
CASE car_count WHEN 0 THEN 'UNAVAILABLE'
WHERE ...
于 2013-03-07T12:37:53.747 に答える
0

一部のデータが表示されないと、クエリを実行するのが難しくなりますが、サブクエリを選択式に移動すると、使用可能なカウントを返すことができます (すべてが予約されている場合は 0 になります)。次に、データを表示するときに、カウントが 0 であるかどうかを確認し、使用できないメッセージを表示できます。

編集:

テーブルの車が与えられた場合:

+----+----------+
| id | model    |
+----+----------+
|  1 | viper    |
|  2 | explorer |
|  3 | viper    |
|  4 | explorer |
+----+----------+

テーブルの予約:

+-------+------------+
| carid | date       |
+-------+------------+
|     1 | 2013-03-07 |
|     3 | 2013-03-07 |
+-------+------------+

上記のようなクエリは次を返します。

+----+----------+
| id | model    |
+----+----------+
|  2 | explorer |
+----+----------+

次のように変更すると、次のようになります。

SELECT
    `outer`.`model`,
    (
        SELECT COUNT(*)
        FROM
            `cars` AS `inner`
        WHERE
            `inner`.`model` = `outer`.`model` AND
            `inner`.`id` NOT IN(
                SELECT `carid`
                FROM `reservations`
                WHERE `date` = '2013-03-07'
            )
        GROUP BY `inner`.`model`
    ) AS `count`
FROM cars AS `outer`
GROUP BY `outer`.`model`;

次に、次のような結果が得られます。

+----------+-------+
| model    | count |
+----------+-------+
| explorer |     2 |
| viper    |  NULL |
+----------+-------+

その後、NULL 値を 0 に戻す必要がある場合は、前述の Liv のように COALESCE を使用できます。

きれいではありません。もっときれいな方法で実行できると確信していますが、機能します。

于 2013-03-07T12:47:29.230 に答える
-1

あなたを正しい方向に向かわせるかもしれない同様の質問がここで尋ねられました。関数をチェックしてくださいCOALESCE()

組み込み関数COALESCE()は、引数の最初のnull以外の値を返します。SELECT COALSECE(foo, 'bar') [...]これにより、結果がnullでない場合は列'foo'の値になり、nullでない場合は値'bar'になるようにクエリを構造化できます。

于 2013-03-07T12:51:02.767 に答える