Newbie - pytanie o zapytanie ;-).
Szczepan - 07-01-2007 00:10
Newbie - pytanie o zapytanie ;-).
Witam.
Proszę o pomoc. Założeniem jest aplikacja, w której jedna osoba przyjmuje zlecenie dla innej, ale to zlecenie moze byc wykonane przez jeszcze kogos innego. Z polskiego na nasze: Pani Basia przyjmuje zlecenie dla Pana Jana, ale ze wzgledu, ze Janek zapil wykonuje je Pan Tomasz. Oczywiscie inne zadanie wykonuje ta osoba, której je zlecona, a w jeszcze innym przypadku, zlecenie jest w trakcie realizacji i wartość pola dla kogo jest [null].
Tabela uzytkownicy: iduzytkownika imie nazwisko Dane: iduzytkownika imie nazwisko 1 Basia Pozadnicka 2 Tomasz Sumienny 3 Jan Pijaczyna
Tabela zadania: idzadania opis id_kto_wprowadzi id_dla_kogo id_kto_wykonal
idzadania opis id_kto_wprowadzil id_dla_kogo id_kto_wykonal 1 wymien zarowke 1 3 2 2 wymien opony 1 2 [null] 3 zastanow sie co robisz ;-) 1 3 3
------------------------------------------------------------------------------------
Jak powinno wygladac prawidlowe zapytanie, ktore w wyniku zwroci:
idzadania opis ??id_kto_wprowadzil ??id_dla_kogo ??id_kto_wykonal 1 wymien zarowke Basia Jan Tomasz 2 wymien opony Basia Tomasz [null] 3 zastanow sie co robisz ;-) Basia Jan Jan
Szczepan - 07-01-2007 00:11
Zeby nie bylo, ze czekam na gotowca, po wykonaniu takiego zapytania
SELECT * FROM zadania z LEFT OUTER JOIN uzytkownicy u ON z.kto_wykonal = u.iduzytkownika
otrzymuje prawie to o co mi chodzi z tym ze imiona i nazwiska pasuja do identyfikatorow osob ktore WYKONALY zadanie, jak jeszcze dodac dodatkowe kolumny z imionami i nazwiskami osob, ktore wprowadzily zadanie oraz dla kogo zadanie bylo.
Zapytanie:
SELECT * FROM zadania z LEFT OUTER JOIN uzytkownicy u ON z.kto_wykonal = u.iduzytkownika LEFT OUTER JOIN uzytkownicy uz ON z.dla_kogo = uz.iduzytkownika
co prawda w efekcie dodaje dodatkowe kolumny, ale sa one puste.
Jezeli to co pisze jest troche pokretnie i niejasno wyjasnione prosze o informacje, postaram sie ubrac to w inne slowa i inaczej wyjasnic problem.
Naprawde bardzo potrzebuje pomocy w tej sprawie.
=?iso-8859-2?q?Jakub_`je=BF=2Fjezik'_Kolasa?= - 07-01-2007 00:11
Szczepan (Sat, 06 Jan 2007 22:28:23 +0100) napisał(a):
> > Naprawde bardzo potrzebuje pomocy w tej sprawie. Na szybko, spróbuj swoje poprawić do postaci mniej więcej:
SELECT idzadania,opis,i1.imie,i2.imie,i3.imie FROM zadania z LEFT OUTER JOIN uzytkownicy i1 ON z.id_kto_wykonal = i1.iduzytkownika LEFT OUTER JOIN uzytkownicy i2 ON z.id_kto_wprowadzil dla_kogo = i2.iduzytkownika LEFT OUTER JOIN uzytkownicy i3 ON z.id_kto_wykonal = i3.iduzytkownika
Przemyśl ew. optymalizację lub widok lub zdaj się na mechanizmy optymalizacji wewnątrz enginów SQL.
Pozdrawiam
-- Jakub 'jezik/nemesis' Kolasa
`Given enough eyeballs, all bugs are shallow' Linus' Law, Eric Raymond
Szczepan - 08-01-2007 00:25
> SELECT idzadania,opis,i1.imie,i2.imie,i3.imie > FROM zadania z > LEFT OUTER JOIN uzytkownicy i1 ON z.id_kto_wykonal = i1.iduzytkownika > LEFT OUTER JOIN uzytkownicy i2 ON z.id_kto_wprowadzil dla_kogo = > i2.iduzytkownika LEFT OUTER JOIN uzytkownicy i3 ON > z.id_kto_wykonal = i3.iduzytkownika
Powyzsze rozwiazanie niestety nie przynioslo pozadanego efektu, ale przy malej modyfikacji i dodaniu unikalnych nazw kolumn wszystko smiga jak nalezy. Dla potomnych podaje jak to zapytanie powinno wygladac (w klauzuli SELECT dodano nazwy kolumn AS imie1 itd):
SELECT idzadania,opis,i1.imie AS imie1,i2.imie AS imie2,i3.imie AS imie3 FROM zadania z LEFT OUTER JOIN uzytkownicy i1 ON z.id_kto_wykonal = i1.iduzytkownika LEFT OUTER JOIN uzytkownicy i2 ON z.id_kto_wprowadzil dla_kogo = i2.iduzytkownika LEFT OUTER JOIN uzytkownicy i3 ON z.id_kto_wykonal = i3.iduzytkownika
Pozdrawiam.
=?iso-8859-2?q?Jakub_`je=BF=2Fjezik'_Kolasa?= - 09-01-2007 00:01
Szczepan (Sun, 07 Jan 2007 10:59:40 +0100) napisał(a):
> Powyzsze rozwiazanie niestety nie przynioslo pozadanego efektu, ale przy > malej modyfikacji i dodaniu unikalnych nazw kolumn wszystko smiga jak > nalezy. Dla potomnych podaje jak to zapytanie powinno wygladac (w klauzuli > SELECT dodano nazwy kolumn AS imie1 itd): [cut]
Jak pisałem, było na szybko bez sprawdzenia -- miałeś sam sprawdzić i dostosować ;-)
> Pozdrawiam. Pozdrawiam
-- Jakub 'jezik/nemesis' Kolasa
`Given enough eyeballs, all bugs are shallow' Linus' Law, Eric Raymond
zanotowane.pldoc.pisz.plpdf.pisz.pleffulla.pev.pl
|
Oracle, SQL, PL/SQL. Jak =?ISO-8859-2?Q?napisa=E6_zapytanie=2C?==?ISO-8859-2?Q?_kt=F3re_zwr=F3ci_nazw=EA_atrybutu=2C_kt=F3reg o?==?ISO-8859-2?Q?_warto=B6ci_spe=B3niaj=B1_zadany_warunek?=
=?ISO-8859-2?Q?Narz=EAdzie_do_budowania_zapyta=F1_SQL=2C?==?I SO-8859-2?Q?_PL/PgSQL=2C_PL/SQL=2C_T-SQL?=
[ms sql] =?ISO-8859-2?Q?wy=B6wietlenie_pierwszych_5_rekord?==?ISO-8859-2?Q?=F3w_z_zapytania_=3F_odpowiednik_ROWNUM_w_o?== ?ISO-8859-2?Q?raclu_dla_MS_SQL=27a?=
phpMyAdmin zadaje =?ISO-8859-2?Q?z=B3e_zapytania=2E=2E=2E_Dl?==?ISO-8859-2?Q?aczego=3F?=
[MSSQL2000] Problem z =?ISO-8859-2?Q?tabel=B1/indeksem/zapytanie?==?ISO-8859-2?Q?m_czy_b=B3=B1d_w_bazie_danych=2E=2E=2E?=
[mysql 5.x] jak =?ISO-8859-2?Q?zrealizowa=E6_zapytanie=3F_cz?==?ISO-8859-2?Q?yli_podzapytanie_i_wi=EAcej_ni=BF_jeden_rz=B1? ==?ISO-8859-2?Q?d_wynik=F3w?=
[oracle] zapytanie dynamiczne z =?ISO-8859-2?Q?=22dynamiczn=B1_?==?ISO-8859-2?Q?nazw=B1_tabeli=22?=
[mysql/php] jak =?ISO-8859-2?Q?zliczy=E6_ilo=B6=E6_unikalnyc?==?ISO-8859-2?Q?h_rekord=F3w_w_jednym_zapytaniu=3F?=
[MySQL] Zapytanie z =?ISO-8859-2?Q?dw=F3ch_tabel_na_raz_?==?ISO-8859-2?Q?i_grupowanie_po_wsp=F3lnym_polu=2E_Jak_=3F?=
mecze sie i mecze i nic - zapytanie czesciowe
zanotowane.pldoc.pisz.plpdf.pisz.platanvarne633.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 |
|