![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 47 Pomógł: 0 Dołączył: 22.07.2006 Ostrzeżenie: (0%) ![]() ![]() |
Mam tabelę "uzytkownicy" z polami:
uzytkownik_id uzytkownik_nazwa oraz tabelę "zadania" z polami zadanie_id czynnosc_1 uzytkownik_id_1 czynnosc_2 uzytkownik_id_2 czynnosc_3 uzytkownik_id_3 czynnosc_4 uzytkownik_id_4 czynnosc_5 uzytkownik_id_5 Oczywiście poszczególne czynności mogą wykonywać ci sami bądź różni użytkownicy. I teraz chcę wyświetlić 1 wiersz z tabeli "zadania" przydzielając każdemu numerowi id użytkownika odpowiednią mu nazwę z tabeli "uzytkownicy". Czy jedynym i najprostszym rozwiązaniem tego problemu jest użycie aż (a może tylko?) 5 złączeń zewnętrznych LEFT JOIN ? Czyli:
|
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 1 385 Pomógł: 55 Dołączył: 1.03.2005 Skąd: śląsk Ostrzeżenie: (0%) ![]() ![]() |
a jak bedzie 100 uzytkownikow to co zrobisz?
chyba jest zle baza zaprojektowana. a moze to specjalnie tak? |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 47 Pomógł: 0 Dołączył: 22.07.2006 Ostrzeżenie: (0%) ![]() ![]() |
Nie, nie będzie 100 użytkowników :-), w jednym wierszu tabeli "zadania" jest zawsze dokładnie 5 użytkowników. Chodzi o to że każde zadanie ma dokładnie 5 etapów, a każdy etap może wykonać inny użytkownik. I zamiast do tabeli "zadania" dodawać pełne nazwy użytkowników dodaje tylko ich numery id i potem pobierając rekord z tabeli "zadania" chcę tym numerom ID użytkowników przyporządkować ich odpowiednie nazwy z tabeli "uzytkownicy".
To zapytanie co jest powyżej jak najbardziej działa i w zasadzie może tak zostać jednak moje pytanie dotyczy tego czy to jest jedyne rozwiązanie? i czy nie da sie tego zrobić np. prościej?. |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 898 Pomógł: 80 Dołączył: 31.05.2008 Ostrzeżenie: (20%) ![]() ![]() |
Ehm i na kiego tam left joiny?
Nie testowane bo nie mam gdzie ale patrz:
Jak można było taką tabelę zrobić... toż już przecież lepiej jest zrobić tak: 1 tabela: uzytkownicy uzytkownik_id | uzytkownik_name 2 tabela: zadania zadanie_id | użytkownik_id | czynnosc_id 3 tabela: czynnosci czynnosc_id | czynnosc_name I wtedy robisz tak:
i wyswietli Ci wszystkich uzytkownikow o wskazanym id zadania i ich nazwy oraz nazwy czynnosci wykonywanych przy danym id zadania. Po co sobie życie komplikować? Ten post edytował webdicepl 5.06.2008, 22:11:06 |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 47 Pomógł: 0 Dołączył: 22.07.2006 Ostrzeżenie: (0%) ![]() ![]() |
Pomińmy zmiany w strukturze tabeli, ona taka ma być jak jest i już (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) . Nie będę wyjaśniał dlaczego.
Co do propozycji zapytania to nie za bardzo go rozumiem... Nie wiem co ma oznaczać zapis: "... uzytkownik_id_1 = (uzytkownik_id = 1)... " Poza tym skąd ja mam wiedzieć że tam będzie użytkownik o id = 1, 2, 3, 4 i 5 ?, może to być użytkownik o id = 114, id = 568 itd. Choć nawet jak są tam użytkownicy o numerach 1,2,3,4 i 5 to zapytanie nie działa. Nie powoduje błędu ale i nie zwraca żadnego wyniku |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 898 Pomógł: 80 Dołączył: 31.05.2008 Ostrzeżenie: (20%) ![]() ![]() |
@EDIT \/ dobra daje sobie spokój... Ten post edytował cojack 5.06.2008, 08:30:40 |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 47 Pomógł: 0 Dołączył: 22.07.2006 Ostrzeżenie: (0%) ![]() ![]() |
zadania.uzytkownik_id_1 = (uzytkownicy.uzytkownik_id = 1) Taki zapis nie działa i nie wiem w ogóle co chcesz tym uzyskać? Jak ja tym Twoim zapytaniem mam "odebrać" 5 różnych nazwisk z tabeli użytkownicy? W wyniku zapytania chcę uzyskać coś takiego: zadanie_id czynnosc_1 uzytkownik_nazwa czynnosc_2 uzytkownik_nazwa czynnosc_3 uzytkownik_nazwa czynnosc_4 uzytkownik_nazwa czynnosc_5 uzytkownik_nazwa Nie wiem czy dobrze przemyślałeś to co piszesz... albo ja czegoś tutaj kompletnie nie rozumiem. Ten post edytował piotrek24 5.06.2008, 08:10:18 |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 793 Pomógł: 32 Dołączył: 23.11.2006 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
@piotrek24
Jak masz źle zrobioną bazę to się potem nie dziw, że wychodzą jakieś głupoty próbując z niej coś pobrać. |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 47 Pomógł: 0 Dołączył: 22.07.2006 Ostrzeżenie: (0%) ![]() ![]() |
@piotrek24 Jak masz źle zrobioną bazę to się potem nie dziw, że wychodzą jakieś głupoty próbując z niej coś pobrać. Ja tu nikogo nie proszę o ocenę mojej bazy danych. Żadne głupoty mi nie wychodzą i wszystko działa jak należy, ale specem nie jestem i chciałem się poradzić kogoś bardziej doświadczonego czy można by to zapytanie uprościć (choć od początku wydaje mi się że nie). Tabele napisałem w uproszczeniu, w rzeczywistości wygląda inaczej. Poszczególne czynności nie składają się tylko z jednego pola tylko z kilku a ich liczba zmienia się w zależności od rodzaju czynności, dlatego pomysł cojack-a nie wchodzi w grę. Ale powtarzam, mój problem nie dotyczy budowy tabeli tylko zapytania więc napisałem to w uproszczeniu dla łatwego zrozumienia. Ten post edytował piotrek24 5.06.2008, 19:55:09 |
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 793 Pomógł: 32 Dołączył: 23.11.2006 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
piotrek24 ty nadal nie rozumiesz o co mi chodzi.
Do tego nie zakładaj nigdy, że obecne rozwiązanie jest najlepsze, a to robisz co do bazy, na pewno nie podamy lepszego rozwiązania jeśli nie znamy specyfiki problemu. W tym wypadku można było coś zrobić, ale straciło by się pewne informacje, więc na pewno takie rozwiązanie odpadnie. A to przez to, że baza jest źle napisana. Tak więc zostaje taki dziwoląg, który musi pięć razy złączać. |
|
|
![]()
Post
#11
|
|
Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
tyle postow o nic (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) a pytanie bylo takie proste:
Cytat To zapytanie co jest powyżej jak najbardziej działa i w zasadzie może tak zostać jednak moje pytanie dotyczy tego czy to jest jedyne rozwiązanie? i czy nie da sie tego zrobić np. prościej?. Odpowiedź: nie, nie da się tego zrobić prościej. Użycie tu 5 left joinow tak jak ty to zrobiles to jedyne sensowne rozwiązanie (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) edit: choć przepraszam, można by się tu pokusić o widoki |
|
|
![]()
Post
#12
|
|
Grupa: Zarejestrowani Postów: 47 Pomógł: 0 Dołączył: 22.07.2006 Ostrzeżenie: (0%) ![]() ![]() |
Odpowiedź: nie, nie da się tego zrobić prościej. Użycie tu 5 left joinow tak jak ty to zrobiles to jedyne sensowne rozwiązanie (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Dzięki, taka odpowiedź mi wystarczy. A o widokach poczytam. |
|
|
![]()
Post
#13
|
|
Grupa: Zarejestrowani Postów: 793 Pomógł: 32 Dołączył: 23.11.2006 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
tyle postow o nic (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) a pytanie bylo takie proste: Odpowiedź: nie, nie da się tego zrobić prościej. Użycie tu 5 left joinow tak jak ty to zrobiles to jedyne sensowne rozwiązanie (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) edit: choć przepraszam, można by się tu pokusić o widoki Chyba trochę za daleko z tą prostotą zaszedłeś, nigdzie nie było na początku napisane o tym że nie można zmieniać struktury bazy, a jakby ją zmienić na pewno dało by się to prościej zrobić. A wiedzę że też z czytaniem moich postów jest problem, bo nie wprost napisałem, że lepiej się tego nie da zrobić. A co do widoków (tu dzież zwanych perspektywami, z angielskiego VIEW), to tylko ukryją tą kwerendę, ułatwią jej używanie, ale nie ułatwią bazie pracy. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 23.08.2025 - 01:37 |