Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> MySQL - pobieranie z dwóch tabel z możliwością opuszczenia jednej, czyli co robić, gdy Left join nie wystarczy
L_Devil
post 12.08.2008, 20:53:00
Post #1





Grupa: Zarejestrowani
Postów: 195
Pomógł: 0
Dołączył: 13.04.2004
Skąd: Łódź

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


Witam!

Mam dwie tabele:
Tabela1
id
rekord
costam


Tabela2
id
costam2

Chcę wybrać wszystko z tabeli 1 (wg. zadanych kryteriów) i wszystkie rekordy z tabeli 2 których pole id jest równe polu owner tabeli 1. Chcę mieć w jednym rzędzie wyników zarówno wyniki z tabeli 1 jak i tabeli 2 (o ile istnieje odpowiadający rekord tabeli 2 - a nie zawsze istnieje). Próbowałem LEFT JOIN, ale jeżeli rekord tabeli 2 nie istnieje, to rekord tabeli 1 jest pomijany, a mi chodzi żeby rekord z tabeli 1 był zawsze zwracany.


--------------------
Językiem którym najlepiej operują wszyscy programiści są przekleństwa.
Go to the top of the page
+Quote Post
Ar2r
post 12.08.2008, 21:20:16
Post #2





Grupa: Zarejestrowani
Postów: 140
Pomógł: 16
Dołączył: 12.06.2002
Skąd: Kielce

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


Może zaprezentujesz swoje zapytanie. Według mnie LEFT JOIN powinno spełnić Twoje potrzeby
Go to the top of the page
+Quote Post
L_Devil
post 13.08.2008, 16:45:49
Post #3





Grupa: Zarejestrowani
Postów: 195
Pomógł: 0
Dołączył: 13.04.2004
Skąd: Łódź

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


  1. SELECT `t1`.`costam` AS `costam`, `t2`.`costam2` AS `costam2` FROM `Tabela1` AS `t1` LEFT JOIN `Tabela2` AS `t2` ON `t2`.`id` = `t1`.`rekord` WHERE `t1`.`costam` LIKE '%warunek%';
To jednak pominie te rekordy Tabela1, które nie posiadają odpowiednika w Tabela2. A mnie chodzi żeby rekord z Tabela1 został _zawsze_ wybrany

Ten post edytował L_Devil 13.08.2008, 16:47:29


--------------------
Językiem którym najlepiej operują wszyscy programiści są przekleństwa.
Go to the top of the page
+Quote Post
Ar2r
post 13.08.2008, 17:57:10
Post #4





Grupa: Zarejestrowani
Postów: 140
Pomógł: 16
Dołączył: 12.06.2002
Skąd: Kielce

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


Składnia wydaje się prawidłowa. Może spróbuj wykonać zapytanie bez WHERE i zobacz czy złączenie działa prawidłowo.
Go to the top of the page
+Quote Post
L_Devil
post 16.08.2008, 00:37:41
Post #5





Grupa: Zarejestrowani
Postów: 195
Pomógł: 0
Dołączył: 13.04.2004
Skąd: Łódź

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


Sprawdziłem - ten mini przykład działa. Gdy jednak stosuję w live aplikacji, już nie. Podaję zapytanie z aplikacji:

  1. SELECT `c`.`group` AS `group`, `c`.`item` AS `item`, `c`.`type` AS `type`, `c`.`updated` AS `updated`, `c`.`info` AS `info`, `l`.`string` AS `title` FROM `drg_changes` AS `c` LEFT JOIN `drg_articles` AS `a` ON `a`.`id`=`c`.`item` LEFT JOIN `drg_lang` AS `l` ON `l`.`id` = `a`.`title_id` WHERE `l`.`lang`="polish" ORDER BY `c`.`id` DESC LIMIT 0, 30


--------------------
Językiem którym najlepiej operują wszyscy programiści są przekleństwa.
Go to the top of the page
+Quote Post
JoShiMa
post 17.08.2008, 14:22:45
Post #6





Grupa: Zarejestrowani
Postów: 1 374
Pomógł: 149
Dołączył: 1.03.2006

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


Może napisz stricte LEFT OUTER JOIN


--------------------
Go to the top of the page
+Quote Post
L_Devil
post 19.08.2008, 21:59:51
Post #7





Grupa: Zarejestrowani
Postów: 195
Pomógł: 0
Dołączył: 13.04.2004
Skąd: Łódź

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


Zapytanie:

  1. SELECT `c`.`group` AS `group`, `c`.`item` AS `item`, `c`.`type` AS `type`, `c`.`updated` AS `updated`, `c`.`info` AS `info`, `l`.`string` AS `title` FROM `drg_changes` AS `c` LEFT OUTER JOIN `drg_articles` AS `a` ON `a`.`id`=`c`.`item` LEFT OUTER JOIN `drg_lang` AS `l` ON `l`.`id` = `a`.`title_id` WHERE `l`.`lang`="polish" ORDER BY `c`.`id` DESC LIMIT 0, 30


Nie pomogło. Nadal pomija te rekordy


--------------------
Językiem którym najlepiej operują wszyscy programiści są przekleństwa.
Go to the top of the page
+Quote Post
JoShiMa
post 20.08.2008, 10:35:08
Post #8





Grupa: Zarejestrowani
Postów: 1 374
Pomógł: 149
Dołączył: 1.03.2006

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


A może:

  1. WHERE `l`.`lang`="polish" OR WHERE `l`.`lang` IS NULL


--------------------
Go to the top of the page
+Quote Post
L_Devil
post 24.08.2008, 19:21:07
Post #9





Grupa: Zarejestrowani
Postów: 195
Pomógł: 0
Dołączył: 13.04.2004
Skąd: Łódź

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


Najtrudniejsze problemy mają najprostsze przyczyny winksmiley.jpg
Dzięki wielkie! Punkcik przekazany winksmiley.jpg


--------------------
Językiem którym najlepiej operują wszyscy programiści są przekleństwa.
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 Wersja Lo-Fi Aktualny czas: 23.06.2025 - 03:18