Forum Webmastera, HTML, CSS, PHP, MySQL, Hosting, Domeny - Forum dla Webmasterów
[mysql] odczyt danych z bazy danych - niepoprawne zapytanie - Wersja do druku

+- Forum Webmastera, HTML, CSS, PHP, MySQL, Hosting, Domeny - Forum dla Webmasterów (https://www.webmastertalk.pl)
+-- Dział: Technologie internetowe - tworzenie stron WWW (https://www.webmastertalk.pl/forum-technologie-internetowe-tworzenie-stron-www)
+--- Dział: Programowanie, Bazy danych (https://www.webmastertalk.pl/forum-programowanie-bazy-danych)
+--- Wątek: [mysql] odczyt danych z bazy danych - niepoprawne zapytanie (/thread-mysql-odczyt-danych-z-bazy-danych-niepoprawne-zapytanie)

Strony: 1 2


[mysql] odczyt danych z bazy danych - niepoprawne zapytanie - Poju - 27-08-2009

Hej,

Mam problem z stworzeniem zapytania.
Mój schemat bazy danych to:

zlecenia_main
--- id
--- miejsce
--- opis
--- jezyk_id
--- zleceniodawca_id
--- kraje_id
--- miejsce_kraj
--- galeria

zlecenia_kraje
id
kraje
jezyk_id

zlecenia_jezyk
id
jezyk

zlecenia_zleceniodawca
id
zlecenia
kraje_id // kolumna narazie nie czynna


Pobieram zapytania poleceniem:
Kod:
SELECT zm.id, zm.miejsce, zm.opis, zz.zlecenia, zk.kraje
FROM zlecenia_main zm
JOIN zlecenia_zleceniodawca zz
JOIN zlecenia_kraje zk
WHERE zm.jezyk_id = $jezyk
AND zz.id = zm.zleceniodawca_id
AND zk.id = zm.kraje_id

Chciałbym do tego jeszcze pobrać 'miejsce_kraj' (kolumna z id tabeli zlecenia_kraje) z tabeli zlecenia_kraje ale przy dodatniu tego do polecenia nie znajduje krajów wszystkich, tylko te gdzie są równe.

Jak mam poprawić zapytanie ?


RE: [mysql] odczyt danych z bazy danych - niepoprawne zapytanie - KowR - 27-08-2009

Hmmm?

Jak złączasz tabele to zamiast where dla zz.id = zm.zleceniodawca_id stosuje się ON Tongue I daj LEFT JOIN a nie JOIN.


RE: [mysql] odczyt danych z bazy danych - niepoprawne zapytanie - Poju - 27-08-2009

Kod:
SELECT zm.id, zm.miejsce, zm.opis, zz.zlecenia, zk.kraje, zm.miejsce_kraj
FROM zlecenia_main zm
LEFT JOIN zlecenia_zleceniodawca zz
ON zz.id = zm.zleceniodawca_id
LEFT JOIN zlecenia_kraje zk
ON zk.id = zm.kraje_id
AND zk.id = zm.miejsce_kraj
WHERE
zm.jezyk_id = 1

Poprawiłem zapytanie, które wcześniej już stosowałem, a wcześniej wkleiłem stare. Chodzi mi o to że teraz otrzymuję ID w miejsce_kraj. A chce je zastępić krajem z kolumny zk.kraj opisową nazwą, niż ID kraju.


RE: [mysql] odczyt danych z bazy danych - niepoprawne zapytanie - KowR - 27-08-2009

tam obok selectu w zm.miejsce_kraj dodaj

zm.miejsce_kraj AS miejscekraj i przy wypisaniu używaj miejscekraj - zrobisz alias tego.


RE: [mysql] odczyt danych z bazy danych - niepoprawne zapytanie - Poju - 27-08-2009

Kod:
SELECT zm.id, zm.miejsce, zm.opis, zz.zlecenia, zk.kraje, zm.miejsce_kraj AS miejscekraj
FROM zlecenia_main zm
LEFT JOIN zlecenia_zleceniodawca zz
ON zz.id = zm.zleceniodawca_id
LEFT JOIN zlecenia_kraje zk
ON zk.id = zm.kraje_id
AND zk.id = miejscekraj
WHERE
zm.jezyk_id = 1

Rodi, z tego co zrozumiałem zapytanie miałem poprawić tak. Jednak powoduje ono błąd:
Cytat:#1054 - Unknown column 'miejscekraj' in 'on clause'

I tak w tym zapytaniu odwołuje się do tej samej tabeli, tylko przez alias. Pewnie nie zrozumiałem o co Ci chodziło.


RE: [mysql] odczyt danych z bazy danych - niepoprawne zapytanie - Marcin - 01-09-2009

Z tego co widzę to pole w bazie masz miejsce_kraj a nie miejscekraj


RE: [mysql] odczyt danych z bazy danych - niepoprawne zapytanie - Poju - 01-09-2009

(01-09-2009, 02:11)Marcin napisał(a): Z tego co widzę to pole w bazie masz miejsce_kraj a nie miejscekraj

Poprawiłem zapytanie:
Kod:
SELECT zm.id, zm.miejsce, zm.opis, zz.zlecenia, zk.kraje, zm.miejsce_kraj AS miejsce_kraj
FROM zlecenia_main zm
LEFT JOIN zlecenia_zleceniodawca zz ON zz.id = zm.zleceniodawca_id
LEFT JOIN zlecenia_kraje zk ON zk.id = zm.kraje_id
AND zk.id = miejsce_kraj
WHERE zm.jezyk_id =1
LIMIT 0 , 30

Aczkolwiek sql zwraca mi ciągle ID tego pola zamiast nazwy kraju z tym ID.

Przykład:
Kod:
id     miejsce     opis     zlecenia     kraje     miejsce_kraj
6    SITECH Polkowice    zabudowa podestu i kontrola szczelnoÅ›ci urzÄ…dze...    OLPIDÜRR S.p.A.    WÅ‚ochy    1



RE: [mysql] odczyt danych z bazy danych - niepoprawne zapytanie - Marcin - 03-09-2009

No pobrało Ci Włochy. Chciałbyś jeszcze id tego kraju? Jeśli tak to przecież id kraju przekazujesz w WHERE. W pierwszym przykładzie miałeś przypisane to do zmiennej $jezyk. Napisz co konkretnie chcesz pobrać Wink.


RE: [mysql] odczyt danych z bazy danych - niepoprawne zapytanie - Poju - 03-09-2009

Chce pobrać nazwę kraju według ID z kolumny miejsce_kraje. Oddało mi wynik '1' zamiast nazwy kraju.


RE: [mysql] odczyt danych z bazy danych - niepoprawne zapytanie - KowR - 03-09-2009

daj tak

zm.miejsce_kraj AS miejscekrajunazwa

i odwołaj się przy wypisaniu $row['miejscekrajunazwa ']