2016-07-28 12 views
1

私は予約のためにフルカラーを持っています。そして、私はフルを10の予約のある日付に表示したいと思います。また、対応する日付にユーザー予約を表示して、その日付の予約が既にあるかどうかを知りたい場合もあります。 event.titleは、フルまたはです。です。予約が10件ある場合、event.titleフルです。ユーザーがその日付の予約をしている場合、event.titleです。私の予約eventSourceはデータベースのJSONエンコードデータのものです。以下のコードは実際にフルを表示していますが、私の予約はまだ含まれていません。mysql if then select内select

SELECT CONCAT('FULL') as title, counter, datee as start 
    FROM (
     SELECT DATE_FORMAT(dateR, '%Y-%m-%d') AS datee, 
      COUNT(ID) AS counter 
      FROM reservations 
     GROUP BY datee 
     )q 
WHERE counter=10 

私はcaseを使用してみましたが、それは#1242 - Subquery returns more than 1 rowを表示されます。

SELECT 
    (case 
    when (select counter 
      FROM (
       SELECT DATE_FORMAT(dateR, '%Y-%m-%d') AS datee, 
       COUNT(ID) AS counter 
       FROM reservations 
       GROUP BY datee 
       ) q) = 10 
      then "full" 
    end) 
    as title; 

Zoomin:

(
    SELECT DATE_FORMAT(dateR, '%Y-%m-%d') AS datee, 
    COUNT(ID) AS counter 
    FROM reservations 
    GROUP BY datee 
) q 
+0

ここで長い道を行くだろう私たちに 'reservations'テーブルからいくつかのサンプルデータを示します。 –

+1

Tim派生テーブルq – Drew

+0

派生テーブル 'q'は2つ以上の行を返します。外側のラッパーではカウンターカウンターになります。 3を好きなように複数の行を比較しています – Drew

答えて

0

あなたがcaseを使用することができ、if声明をシミュレートします。おそらくこれは、あなたが探しているものです。さらに良い

SELECT CASE WHEN counter = 10 THEN 'FULL' ELSE 'MY RESERVATION' END as title, 
    counter, datee as start 
FROM (
    SELECT DATE_FORMAT(dateR, '%Y-%m-%d') AS datee, COUNT(ID) AS counter 
    FROM reservations 
    GROUP BY datee 
    ) q 
1
SELECT ymd, if (counter > 9, 'FULL', 'MY RESERVATION') AS Title 
FROM (
    SELECT date(dateR) AS ymd, count(*) AS counter 
    FROM reservations 
    GROUP BY 1 
) AS t 

OR:

SELECT date(dateR) AS ymd, if (count(*) > 9, 'FULL', 'MY RESERVATION') AS Title 
FROM reservations 
GROUP BY 1