Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Złaczenia tabel problem + konfliktem nazw
Forum PHP.pl > Forum > Bazy danych > MySQL
Mugol
Witam

Mam mały problem (pewnie dla niektórych banalny ale ja sie z nim męcze już troche;/)

więc tak:
mam 3 tabele:
tabela 1: ladunki (ma miedzy innymi pola: kraj_pochodzenia, kraj_docelowy i typ_paczki - pola te przechowują odpowiednio 2 pierwsze id_kraju z tabeli kraje i id_paczki z tabeli paczki )
tabela 2: kraje (id_kraju, skrot, nazwa_pl, nazwa_en)
tabela 3: paczki (id_paczki, nazwa_pl, nazwa_en)

i teraz tak:
Chciałbym wybrać wszystkie pola z tabeli ladunki i wyswietlić je (to ta prosta cześć):

SELECT *
FROM ladunki;

na wynikach dostaje id_kraju i id_paczki a potrzebuje skrotu państwa z tabeli kraje i nazwa_pl, nazwa_en z tabeli paczki (tutaj pojawia się konflikt nazw - tabela kraje i paczki ma takie same nazwy tabel).

Próbowałem łączyc tabele na rożne sposoby np.:

SELECT *
FROM ladunki
LEFT JOIN kraje AS k1 ON k1.id_kraj = ladunki.zaladunek_kraj
LEFT JOIN kraje AS k2 ON k2.id_kraj = ladunki.przeznaczenie_kraj
LEFT JOIN paczki AS k3 ON typ_paczki = k3.id_paczka;

ale wystąpił maly problem:
odwołując się w wynikach na stronie $row->skrot dostaje wyniki nadpisane tzn: jesli podmienia mi kraj_pochodzenia to automatycznie taki sam skrót mam w kraj_docelowy mimo ze ma inny id;/
i tutaj konflikt nazw wywołując np $row->nazwa_pl dostaje nazwe kraju a potrzebuje nazwy typu paczki;/

(myslalem o jakis aliasach ale za nic nie wiem jak je podpiąc zeby mi błedu nie wywalało)

z góry dzieki za pomoc:)
rocktech.pl
Sþróbuj tak.
  1. SELECT *.l,`k2`.`skrot` AS skrot1
  2. FROM ladunki AS l
  3. LEFT JOIN kraje AS k1 ON k1.id_kraj = ladunki.zaladunek_kraj
  4. LEFT JOIN kraje AS k2 ON k2.id_kraj = ladunki.przeznaczenie_kraj
  5. LEFT JOIN nadwozia AS k3 ON nadwozie = k3.id_nadwozie;
Mugol
Niestety wywala mi błąd

  1. 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 '.l,`k2`.`skrot` as skrot1 FROM ladunki AS l LEFT JOIN kraje AS k1 ON k1.id_kraj ' at line 1
  2.  
  3. SELECT *.l,`k2`.`skrot` AS skrot1 FROM ladunki AS l LEFT JOIN kraje AS k1 ON k1.id_kraj = ladunki.zaladunek_kraj LEFT JOIN kraje AS k2 ON k2.id_kraj = ladunki.przeznaczenie_kraj LEFT JOIN paczki AS k3 ON typ_paczki = k3.id_paczki ORDER BY wyjazd_data ;


przebudowałem go troche na taki
  1. SELECT l.*,k2.skrot AS skrot2, k1.skrot AS skrot1, k3.nazwa_pl, k3.nazwa_en
  2. FROM ladunki AS l
  3. LEFT JOIN kraje AS k1 ON k1.id_kraj = l.zaladunek_kraj
  4. LEFT JOIN kraje AS k2 ON k2.id_kraj = l.przeznaczenie_kraj
  5. LEFT JOIN paczki AS k3 ON typ_paczki = k3.id_paczki


Teraz wszystko gra i buczy:) Dzieki za pomoc:)
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.