MySql, как сделать строку и добавить дочерние таблицы на основе типа с запросом? - PullRequest
0 голосов
/ 24 июня 2019

Итак, у меня есть три таблицы:

Гость может сделать бронирование, и в таблице бронирования вы можете увидеть, какое бронирование сделал гость на основании первичного ключа 'pID'. У меня нет строки типа в моей базе данных. Я хочу показать доступные номера в отеле, поэтому в основном pID, тип и город номеров люкс и небольших номеров, которые не встречаются при бронировании. Как я могу сделать это с оператором IN?

предварительный заказ:

pID              |begindate    | enddate     |   
------------------------------------------------------
COD12            | 2014-07-15  | 2014-07-18  |
COD400           | 2014-07-20  | 2014-07-21  |
KOD12            | 2014-07-01  | 2014-07-07  |
COD600           | 2014-07-04  | 2014-07-12  |
MOD10            | 2014-08-10  | 2014-08-16  |

Люкс номер стол:


pID              |city         |    
---------------------------------
COD12            | Corona      | 
COD400           | Corona      |   
KHMED12          | Kansas      |
KHMED14          | Kansas      |
KOD12            | Kentucky    |
KOD30            | Kentucky    |
Small room table:

pID              |city         |    
---------------------------------
COD600           | Corona      |
MOD10            | Madrid      |
KOD20            | Kentucky    | 

Что я хочу: L = номер люкс S = маленькая комната

pID              |type         | city   
-----------------------------------------
KHMED12          | L           | Kansas
KHMED14          | L           | Kansas
KOD20            | S           | Kentucky
KOD30            | L           | Kentucky

Ответы [ 2 ]

0 голосов
/ 25 июня 2019

"не встречайся" -> Подумай "ЛЕВЫЙ СОЕДИНЯЙТЕСЬ ... ГДЕ .. НУЛЬ"

( SELECT pid, 'L' AS type, city
      FROM luxe
      LEFT JOIN reservations res USING(pid)
      WHERE res.pid IS NULL )
UNION ALL
( SELECT pid, 'S' AS type, city
      FROM small
      LEFT JOIN reservations res USING(pid)
      WHERE res.pid IS NULL )

Вам также следует переосмыслить разделение двух «одинаковых» таблиц (маленькийи люкс);рассмотреть возможность объединения их в одну таблицу.Гораздо проще отфильтровать, чем объединить таблицы.

0 голосов
/ 24 июня 2019

Я считаю, что это должно работать:

SELECT 
    -- pID
    res.pID,
    -- If there is a bigger count in the lux, than lux has the order, else: small has it
    IF(res.lux_count > res.small_count, "L", "S") as type,
    -- Same logic, but for getting the city from the right table by order pID
    IF(res.lux_count > res.small_count, 
        (SELECT lt.city FROM LUX_ROOM_TABLE lr WHERE lr.pID = res.pID),
        (SELECT lt.city FROM SMALL_ROOM_TABLE sr WHERE sr.pID = res.pID)) as city
FROM 
(
    SELECT  
        -- Reservation ID
        r.pID,
        -- Will give 1 if contains the order, 0 if not: for Luxe
        (SELECT count(*) from LUX_ROOM_TABLE LRT where LRT.pID=R.pID) as lux_count,
        -- Will give 1 if contains the order, 0 if not: for small
        (SELECT count(*) from SMALL_ROOM_TABLE SRT where SRT.pID=R.pID) as small_count,
    FROM RESERVATIONS R
    WHERE
        -- Where ID is in the list of your orders.
        pID IN ("","")
) res;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...