Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [SQL] Problem z INNER JOIN, złączenie 2 tabeli
wbijok
post
Post #1





Grupa: Zarejestrowani
Postów: 24
Pomógł: 0
Dołączył: 28.02.2007

Ostrzeżenie: (0%)
-----


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.

Ten post edytował wbijok 19.01.2012, 11:49:47
Go to the top of the page
+Quote Post
rocktech.pl
post
Post #2





Grupa: Zarejestrowani
Postów: 587
Pomógł: 131
Dołączył: 8.02.2010

Ostrzeżenie: (0%)
-----


Witam.

  1. SELECT * FROM hotel_l CROSS JOIN zakwaterowania ON hotel_l.id_hotel = zakwaterowania.id)


--------------------
Despite the tons of examples and docs, mod_rewrite is voodoo. Damned cool voodoo, but still voodoo. --Brian Moore

I never go looking for a sucker. I look for a Champion and make a sucker of of him. --Amarillo Slim


Home-made : js-gui-classes | Accordion | Tabs | Carousel / php-sms-classes | Obsługa bramki SMS MultiInfo | Obsługa bramki SMS Mobiltek
Go to the top of the page
+Quote Post
wbijok
post
Post #3





Grupa: Zarejestrowani
Postów: 24
Pomógł: 0
Dołączył: 28.02.2007

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
rocktech.pl
post
Post #4





Grupa: Zarejestrowani
Postów: 587
Pomógł: 131
Dołączył: 8.02.2010

Ostrzeżenie: (0%)
-----


No tak na odwrót smile.gif

  1. SELECT * FROM zakwaterowania CROSS JOIN hotel_l ON hotel_l.id_hotel = zakwaterowania.id)


--------------------
Despite the tons of examples and docs, mod_rewrite is voodoo. Damned cool voodoo, but still voodoo. --Brian Moore

I never go looking for a sucker. I look for a Champion and make a sucker of of him. --Amarillo Slim


Home-made : js-gui-classes | Accordion | Tabs | Carousel / php-sms-classes | Obsługa bramki SMS MultiInfo | Obsługa bramki SMS Mobiltek
Go to the top of the page
+Quote Post
wbijok
post
Post #5





Grupa: Zarejestrowani
Postów: 24
Pomógł: 0
Dołączył: 28.02.2007

Ostrzeżenie: (0%)
-----


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

Ten post edytował wbijok 19.01.2012, 12:34:44
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 21.08.2025 - 07:38