ďťż
 
znowu LEFT JOIN ďťż
 
znowu LEFT JOIN
Zobacz wiadomości
 
Cytat
A gdyby tak się wedrzeć na umysłów górę, / Gdyby stanąć na ludzkich myśli piramidzie, / I przebić czołem przesądów chmurę, / I być najwyższą myślą wcieloną. . . Juliusz Słowacki, Kordian
Indeks BCB i MySQL subiekt gt fototapeta
 
  Witamy

znowu LEFT JOIN



WojtekB - 27-03-2007 00:03
znowu LEFT JOIN
  Witam,
mam 2 tabele, dla przykładu:
ksiazki i w niej pola: id_ks, tytul, autor, tlumacz
i drugą
osoby z polami id_os, ime, nazwisko

W tabeli ksiazki w polach autor i tlumacz wpisane jest id_os.

Aby wyswietlic mam takie zapytanie:
"SELECT * FROM ksiazki LEFT JOIN osoby ON ksiazki.autor=osoby.id_os"
i to dziala ale ja chce pokazywac rownierz tlumacza, wiec rozbudowalem
zapytanie:
"SELECT * FROM ksiazki LEFT JOIN osoby ON (ksiazki.autor=osoby.id_os And
ksiazki.tlumacz=osoby.id_os)"
jednak wówczas nie wyświetla mi sie nic.
Co powinienem zmienić?





=?ISO-8859-2?Q?Pawe=B3_Matejski?= - 27-03-2007 00:03

  WojtekB wrote:
> Witam,
> mam 2 tabele, dla przykładu:
> ksiazki i w niej pola: id_ks, tytul, autor, tlumacz
> i drugą
> osoby z polami id_os, ime, nazwisko
>
> W tabeli ksiazki w polach autor i tlumacz wpisane jest id_os.
>
> Aby wyswietlic mam takie zapytanie:
> "SELECT * FROM ksiazki LEFT JOIN osoby ON ksiazki.autor=osoby.id_os"
> i to dziala ale ja chce pokazywac rownierz tlumacza, wiec rozbudowalem
> zapytanie:
> "SELECT * FROM ksiazki LEFT JOIN osoby ON (ksiazki.autor=osoby.id_os And
> ksiazki.tlumacz=osoby.id_os)"
> jednak wówczas nie wyświetla mi sie nic.
> Co powinienem zmienić?

Dwa razy użyj tabeli osoby z różnymi aliasami.

--
P.M.




=?ISO-8859-2?Q?Cezary_Gr=B1dys?= - 27-03-2007 00:03

  Użytkownik WojtekB napisał:
> Witam,
> mam 2 tabele, dla przykładu:
> ksiazki i w niej pola: id_ks, tytul, autor, tlumacz

Zapominasz w tym momencie, że książka może mieć kilku autorów i tłumaczy.

--
Cezary Grądys
czarekgr@wa.onet.pl




WojtekB - 27-03-2007 00:03

  Cezary Grądys wrote:

> Użytkownik WojtekB napisał:
>> Witam,
>> mam 2 tabele, dla przykładu:
>> ksiazki i w niej pola: id_ks, tytul, autor, tlumacz
>
>
> Zapominasz w tym momencie, że książka może mieć kilku autorów i tłumaczy.
>
>
>
To tylko przykład. Chce najpierw dojść do sposobu wyswietlania danych osoby
na podstawie jej id z tabeli ksiazki. Oczywiscie nie chce używac zapytan w
pętli.





Grzegorz Danowski - 27-03-2007 00:03

  "WojtekB" <antyspam@spam.no> wrote in message
news:eu880j$lfj$1@atlantis.news.tpi.pl...
> Witam,
> mam 2 tabele, dla przykładu:
> ksiazki i w niej pola: id_ks, tytul, autor, tlumacz
> i drugą
> osoby z polami id_os, ime, nazwisko
>
> W tabeli ksiazki w polach autor i tlumacz wpisane jest id_os.
>
> Aby wyswietlic mam takie zapytanie:
> "SELECT * FROM ksiazki LEFT JOIN osoby ON ksiazki.autor=osoby.id_os"
> i to dziala ale ja chce pokazywac rownierz tlumacza, wiec rozbudowalem
> zapytanie:
> "SELECT * FROM ksiazki LEFT JOIN osoby ON (ksiazki.autor=osoby.id_os And
> ksiazki.tlumacz=osoby.id_os)"
> jednak wówczas nie wyświetla mi sie nic.
> Co powinienem zmienić?

Nie wyświetla się nic, bo to co napisałeś wyszukuje te książki dla których
autor jest taki sam jak tłumacz (a w Twojej bazie takowych nie ma). Aby
napisać poprawne zapytanie powinieneś skorzystać z rady Pawła, ale skoro
dalej masz z tym problem, to skorzystaj z kolejnej wskazówki:

SELECT
*
FROM
ksiazki
LEFT JOIN
osoby As Autorzy
ON
ksiazki.autor = Autorzy.id_os
Left Join
osoby As Tlumacze
On
ksiazki.tlumacz = Tlumacze.id_os
--
Pozdrawiam
Grzegorz




WojtekB - 27-03-2007 00:03

  Grzegorz Danowski wrote:

>
> SELECT
> *
> FROM
> ksiazki
> LEFT JOIN
> osoby As Autorzy
> ON
> ksiazki.autor = Autorzy.id_os
> Left Join
> osoby As Tlumacze
> On
> ksiazki.tlumacz = Tlumacze.id_os

Spróbowałem jak proponowałeś jednak z małą modyfikacją bo założyłem ze
pisząc Autorzy i Tlumacze miałeś na mysli autor i tlumacz, Wysmażyłem coś
takiego:

SELECT
*
FROM
ksiazki
LEFT JOIN
osoby As autor
ON
ksiazki.autor = autor.id_os
Left Join
osoby As tlumacz
On
ksiazki.tlumacz = tlumacz.id_os

Niestety w efekcie otrzymuje tlumacza w miejscu autora i tłumacza (2x
tlumacz) :-(
Ale chyba wiem (nie do konca) gdzie robię błąd
Wynik zapytania wyswietlam w ten sposób:
while($wiersz=mysql_fetch_array ($wynik)) {
echo "".$wiersz['tytul']." autor:".$wiersz['imie']." ".$wiersz['nazwisko']."
tlumacz:".$wiersz['imie']." ".$wiersz['nazwisko']."";}
logiczne ze pokaze mi te same dane autora i tlumacza.
Jak to inaczej zrobić?




Grzegorz Danowski - 27-03-2007 00:03

  "WojtekB" <antyspam@spam.no> wrote in message
news:eu96ag$jt4$1@atlantis.news.tpi.pl...
> Spróbowałem jak proponowałeś jednak z małą modyfikacją bo założyłem ze
> pisząc Autorzy i Tlumacze miałeś na mysli autor i tlumacz, Wysmażyłem coś
> takiego:
.....
Ja bym unikał nadawania tabelom takich samych aliasów jak nazwy pól (u
Ciebie tłumacz jest nazwą pola a raz nazwą aliasu). Generalnie używam jako
aliasów jednoliterowych symboli (np. T, A), a Tobie chciałem tylko pokazać
ideę aliasów.

> Niestety w efekcie otrzymuje tlumacza w miejscu autora i tłumacza (2x
> tlumacz) :-(
> Ale chyba wiem (nie do konca) gdzie robię błąd
> Wynik zapytania wyswietlam w ten sposób:
> while($wiersz=mysql_fetch_array ($wynik)) {
> echo "".$wiersz['tytul']." autor:".$wiersz['imie']."
> ".$wiersz['nazwisko']."
> tlumacz:".$wiersz['imie']." ".$wiersz['nazwisko']."";}
> logiczne ze pokaze mi te same dane autora i tlumacza.
> Jak to inaczej zrobić?

Nie znam się na pehapie, ale przypuszczam, że jeśli w wyniku zapytania
pojawiły się kolumny o takich samych nazwach, lecz z dwóch różnych tabel, to
można je jakoś odróżnić. Hmm, zajrzałem do googlowinicy i znalazłem tam
(http://pl.php.net/mysql_fetch_array, nie wiem na ile to aktualne):
"mysql_fetch_array() jest rozszerzoną wersją mysql_fetch_row(). Oprócz
zapisywania danych w indeksach numerycznych, zapisuje je też w indeksach
przyporządkowujących (asocjacyjnych), używając nazw pól jako kluczy.
Jeżeli dwie lub więcej kolumn wyniku ma te same nazwy, ostatnia kolumna
będzie brana pod uwagę. Dostęp do innych kolumn o tej samej nazwie jest
możliwy jedynie przez indeksowanie numeryczne lub przez stworzenie aliasa."

Tak więc musisz użyć aliasów także na poszczególne kolumny, czyli np.:

SELECT
K.*, A.*,
T.imie As T_Imie,
T.nazwisko As T_Nazwisko
FROM
ksiazki As K
LEFT JOIN
osoby As Autorzy
ON
ksiazki.autor = Autorzy.id_os
Left Join
osoby As Tlumacze
On
ksiazki.tlumacz = Tlumacze.id_os

i potem
while($wiersz=mysql_fetch_array ($wynik)) {
echo "".$wiersz['tytul']." autor:".$wiersz['imie']."
".$wiersz['nazwisko']."
tlumacz:".$wiersz['T_Imie']." ".$wiersz['T_Nazwisko']."";}
--
Pozdrawiam
Grzegorz




WojtekB - 30-03-2007 00:07

  Grzegorz Danowski wrote:

> "WojtekB" <antyspam@spam.no> wrote in message
> news:eu96ag$jt4$1@atlantis.news.tpi.pl...
>> Spróbowałem jak proponowałeś jednak z małą modyfikacją bo założyłem ze
>> pisząc Autorzy i Tlumacze miałeś na mysli autor i tlumacz, Wysmażyłem coś
>> takiego:
> ....
> Ja bym unikał nadawania tabelom takich samych aliasów jak nazwy pól (u
> Ciebie tłumacz jest nazwą pola a raz nazwą aliasu). Generalnie używam jako
> aliasów jednoliterowych symboli (np. T, A), a Tobie chciałem tylko pokazać
> ideę aliasów.
>
>> Niestety w efekcie otrzymuje tlumacza w miejscu autora i tłumacza (2x
>> tlumacz) :-(
>> Ale chyba wiem (nie do konca) gdzie robię błąd
>> Wynik zapytania wyswietlam w ten sposób:
>> while($wiersz=mysql_fetch_array ($wynik)) {
>> echo "".$wiersz['tytul']." autor:".$wiersz['imie']."
>> ".$wiersz['nazwisko']."
>> tlumacz:".$wiersz['imie']." ".$wiersz['nazwisko']."";}
>> logiczne ze pokaze mi te same dane autora i tlumacza.
>> Jak to inaczej zrobić?
>
> Nie znam się na pehapie, ale przypuszczam, że jeśli w wyniku zapytania
> pojawiły się kolumny o takich samych nazwach, lecz z dwóch różnych tabel,
> to można je jakoś odróżnić. Hmm, zajrzałem do googlowinicy i znalazłem tam
> (http://pl.php.net/mysql_fetch_array, nie wiem na ile to aktualne):
> "mysql_fetch_array() jest rozszerzoną wersją mysql_fetch_row(). Oprócz
> zapisywania danych w indeksach numerycznych, zapisuje je też w indeksach
> przyporządkowujących (asocjacyjnych), używając nazw pól jako kluczy.
> Jeżeli dwie lub więcej kolumn wyniku ma te same nazwy, ostatnia kolumna
> będzie brana pod uwagę. Dostęp do innych kolumn o tej samej nazwie jest
> możliwy jedynie przez indeksowanie numeryczne lub przez stworzenie
> aliasa."
>
> Tak więc musisz użyć aliasów także na poszczególne kolumny, czyli np.:
>
> SELECT
> K.*, A.*,
> T.imie As T_Imie,
> T.nazwisko As T_Nazwisko
> FROM
> ksiazki As K
> LEFT JOIN
> osoby As Autorzy
> ON
> ksiazki.autor = Autorzy.id_os
> Left Join
> osoby As Tlumacze
> On
> ksiazki.tlumacz = Tlumacze.id_os
>
> i potem
> while($wiersz=mysql_fetch_array ($wynik)) {
> echo "".$wiersz['tytul']." autor:".$wiersz['imie']."
> ".$wiersz['nazwisko']."
> tlumacz:".$wiersz['T_Imie']." ".$wiersz['T_Nazwisko']."";}
> --
> Pozdrawiam
> Grzegorz

Znalazłem wreszcie czas i po kilku(nastu) próbach udało mi się :-)
Dzięki za pomoc.
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • effulla.pev.pl
  • comp
    [MySQL] Wybierz tylko te rekordy z t1 =?ISO-8859-2?Q?kt=F3rych_?==?ISO-8859-2?Q?nie_ma_w_t2=2E_JOIN_=3F?= [mysql, postgres] poprawne uzycie GROUP BY i JOIN [MySql] pytanie o relacje, JOIN Zapytanie na 3 tabele, JOIN itp. dziwna sprawa z join w mysql 5.0 [sql]kolejność join'ów ma znaczenie? wydajnosc wielokrotnych join'ów [MySQL] zapytanie JOIN [mysql] warunkowy inner join JOIN i trzy tabelki
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • melooonka.opx.pl
  • Cytat

    Decede mihi sole - nie zasłaniaj mi słonca.
    Gdy kogoś kochasz, jesteś jak stworzyciel świata - na cokolwiek spojrzysz, nabiera to kształtu, wypełnia się barwą, światłem. Powietrze przytula się do ciebie, choćby był mróz, a ty masz w sobie tyle radości, że musisz ją rozdawać wokoło, bo się w tobie nie mieści
    Hoc fac - tak czyń.
    A tergo - od tyłu; z tyłu.
    I czarne włosy posiwieją. Safona

    Valid HTML 4.01 Transitional

    Free website template provided by freeweblooks.com