• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

question-closed Pobranie id różnych od id w drugiej tabeli

Object Storage Arubacloud
0 głosów
137 wizyt
pytanie zadane 19 czerwca 2018 w SQL, bazy danych przez Alterwar Dyskutant (7,650 p.)
zamknięte 19 czerwca 2018 przez Alterwar

Witam,

mam taki kod. Dzięki niemu otrzymuje wszystkie zarezerwowane sale na dany dzień. Nie mogę jednak zrozumieć jak mam zrobić, żeby pobrać wszystkie sale różne od zarezerwowanych. Tzn pobieram wszystkie sale z tabeli room, których nie ma w tabeli reservation. Macie może jakiś pomysł? Bo mogę robić wszystko w pętlach i dostane zamierzony wynik, ale sądzę, że można od razu w zapytaniu pobrać.

$reservated_for = $this->db->query(
            'SELECT
                pr_room.id id_room,
                pr_room.id_edifice,
                pr_room.id_type_room,
                pr_room.number number_room,
                pr_room.number_of_seats number_of_seats,
                pr_reservation.id,
                pr_reservation.id_room id_room_reservation,
                pr_reservation.id_hours id_hours,
                pr_reservation.id_users,
                pr_reservation.day,
                pr_hours.id,
                pr_hours.hour hours_hour
             FROM room pr_room
             LEFT JOIN reservation pr_reservation ON pr_room.id = pr_reservation.id_room
             LEFT JOIN hours pr_hours ON pr_reservation.id_hours = pr_hours.id
             WHERE pr_room.id_edifice = ?
             AND pr_room.id_type_room = ?
             AND pr_reservation.day = ?
             AND pr_hours.id = ?',
             [$id_edifice, $id_typeroom, $day, $id_hours]
        );

 

Przerobiłem zapytanie, wydaje mi się, że powinienem iść w tą stronę, jednak dostaje błędem

$reservated_for = $this->db->query(
            'SELECT
                pr_room.id id_room,
                pr_room.id_edifice,
                pr_room.id_type_room,
                pr_room.number number_room,
                pr_room.number_of_seats number_of_seats,
                pr_reservation.id,
                pr_reservation.id_room id_room_reservation,
             FROM room pr_room
             WHERE pr_room.id NOT IN (
                 SELECT pr_reservation.id FROM reservation pr_reservation WHERE pr_reservation.id = pr_room.id
             )
             AND pr_room.id_edifice = ?
             AND pr_room.id_type_room = ?',
             [$id_edifice, $id_typeroom]
        );

 

komentarz zamknięcia: rozwiązane
komentarz 19 czerwca 2018 przez CjanciK Bywalec (2,970 p.)
Jakim błędem ?
komentarz 19 czerwca 2018 przez Alterwar Dyskutant (7,650 p.)
edycja 19 czerwca 2018 przez Alterwar

Uprościłem jak najbardziej się dało. Widocznie coś źle zapisuje. Tak wygląda kod

$reservated_for = $this->db->query(
            'SELECT *
             FROM room ( SELECT id_room FROM reservation WHERE id_room != room.id )
             WHERE id_edifice = ?
             AND id_type_room = ?',
             [$id_edifice, $id_typeroom]
        );

 A tak błąd:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '( SELECT id_room FROM reservation WHERE id_room != room.id ) WHERE' at line 2

SELECT * FROM room ( SELECT id_room FROM reservation WHERE id_room != room.id ) WHERE id_edifice = '90' AND id_type_room = '4'

 

Edit:

udało się osiągnąć zamierzony wynik, może komuś się przyda:

$reservated_for = $this->db->query(
                'SELECT *
                 FROM room
                 WHERE id NOT IN ( SELECT id_room FROM reservation WHERE id_room = room.id AND day = ? AND id_hours = ?)
                 AND id_edifice = ?
                 AND id_type_room = ?',
                 [$day, $id_hours, $id_edifice, $id_typeroom]
            );

 

komentarz 19 czerwca 2018 przez CjanciK Bywalec (2,970 p.)

A to: 

SELECT * FROM room
WHERE room.id NOT IN
( SELECT reservation.id_room FROM reservation )
AND id_edifice = ?
AND id_type_room = ?

Przy tym zapytaniu założyłem, że w tabeli reservation są tylko pokoje zarezerwowane.

Jak nie zadziała pokaż tabele, będzie łatwiej znaleźć rozwiązanie.

pzdr

Podobne pytania

0 głosów
3 odpowiedzi 3,140 wizyt
0 głosów
1 odpowiedź 419 wizyt
0 głosów
1 odpowiedź 122 wizyt
pytanie zadane 18 sierpnia 2019 w SQL, bazy danych przez cyrus33 Użytkownik (680 p.)

92,576 zapytań

141,426 odpowiedzi

319,651 komentarzy

61,961 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...