Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: MySQL - pobieranie z dwóch tabel z możliwością opuszczenia jednej
Forum PHP.pl > Forum > Bazy danych > MySQL
L_Devil
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.
Ar2r
Może zaprezentujesz swoje zapytanie. Według mnie LEFT JOIN powinno spełnić Twoje potrzeby
L_Devil
  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
Ar2r
Składnia wydaje się prawidłowa. Może spróbuj wykonać zapytanie bez WHERE i zobacz czy złączenie działa prawidłowo.
L_Devil
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
JoShiMa
Może napisz stricte LEFT OUTER JOIN
L_Devil
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
JoShiMa
A może:

  1. WHERE `l`.`lang`="polish" OR WHERE `l`.`lang` IS NULL
L_Devil
Najtrudniejsze problemy mają najprostsze przyczyny winksmiley.jpg
Dzięki wielkie! Punkcik przekazany winksmiley.jpg
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.