Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [SQL] Problem z INNER JOIN, złączenie 2 tabeli
Forum PHP.pl > Forum > Przedszkole
wbijok
Witam, proszę o pomoc w prawidłowym złączeniu tabelek.

Posiadam dwie tabelki:
  1. CREATE TABLE IF NOT EXISTS `zakwaterowania` (
  2. `id` int(255) NOT NULL AUTO_INCREMENT,
  3. `nazwa` varchar(255) NOT NULL,
  4. PRIMARY KEY (`id`)
  5. )

W sumie 52 rekordy.

  1. CREATE TABLE IF NOT EXISTS `hotel_l` (
  2. `id` int(255) NOT NULL AUTO_INCREMENT,
  3. `id_oferta` int(255) NOT NULL,
  4. `id_hotel` int(255) NOT NULL,
  5. PRIMARY KEY (`id`)
  6. )

Oraz tabelka informująca o przypisaniu rodzaju zakwaterowania do oferty. 11 rekordów.

Wyciągam z nich dane za pomocą:
  1. SELECT * FROM hotel_l RIGHT OUTER JOIN zakwaterowania ON (hotel_l.id_hotel = zakwaterowania.id)

Przy czym chciałbym wyświetlić 52 rekordy z nazwą zakwaterowania w formie checkboxów wraz z informacją, który checkbox jest zaznaczony. Problem polega na tym, że powyższy kod wyświetla mi 56 rekordów. Zdublowane 4 rekordy. A powinno być 52 rekordy. Jak to ugryźć? Wiem, że muszę dodać jakieś ograniczenie do zapytania typu where id_oferta = NR_OFERTY aktualnie wyświetlanej. Tylko, żeby nie ograniczyło mi to ilość checkboxu do paru, powinno zostać 52 i parę zaznaczonych, które mają w tabeli hotel_l przypisane id_oferta.

Oto fragment złączonej, zdublowanej tabelki:
  1. id id_oferta id_hotel id nazwa
  2. 15 21 72 72 ELENA - pok. 2os.
  3. 18 21 74 74 NINA - pok. 2os. i 3os.
  4. 16 21 68 68 Akademik - pok. 3-os.
  5. 25 15 74 74 NINA - pok. 2os. i 3os.
  6. 21 15 68 68 Akademik - pok. 3-os.
  7. 22 15 72 72 ELENA - pok. 2os.
  8. NULL NULL NULL 77 Hotel *** - pok. 3os
  9. NULL NULL NULL 23 Stefanov III

Powtarza się elena, nina, akademik i inne, które wywaliłem.
rocktech.pl
Witam.

  1. SELECT * FROM hotel_l CROSS JOIN zakwaterowania ON hotel_l.id_hotel = zakwaterowania.id)
wbijok
Niekoniecznie, jako wynik CROSS JOIN otrzymuję tylko 11 rekordów:
  1. id nazwa id id_oferta id_hotel
  2. 12 Hotel pok.2.os 20 15 12
  3. 68 Akademik - pok. 3-os. 21 15 68
  4. 72 ELENA - pok. 2os. 22 15 72
  5. 73 ELENA - pok. 3os. 17 21 73
  6. 74 NINA - pok. 2os. i 3os. 18 21 74
  7. 11 Hotel pok. 2os. lub 3os. 19 15 11
  8. 72 ELENA - pok. 2os. 15 21 72
  9. 68 Akademik - pok. 3-os. 16 21 68
  10. 73 ELENA - pok. 3os. 23 15 73
  11. 67 Akademik - pok. 2-os. 24 15 67
  12. 74 NINA - pok. 2os. i 3os. 25 15 74

i nie ma innych obiektów. Chyba, że nie umiem skorzystać z CROSS JOIN.
rocktech.pl
No tak na odwrót smile.gif

  1. SELECT * FROM zakwaterowania CROSS JOIN hotel_l ON hotel_l.id_hotel = zakwaterowania.id)
wbijok
Ehhh, chyba nie umiem wykorzystać tej funkcji. Otrzymałem takie same wyniki tylko kolumny są odwrotnie wyświetlone. id_hotel, id_oferta etc.

Ogólnie potrzebuję zrobić coś takiego tylko poprawnego pod względem SQLa:
  1. SELECT * FROM zakwaterowania LEFT OUTER JOIN (hotel_l HAVING/WHERE id_oferta=$id) ON (zakwaterowania.id = hotel_l.id_hotel)

Przed złączeniem aby tabelka hotel_l była przefiltrowana po HAVING/WHERE id_oferta=$id
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.