![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 21 Pomógł: 0 Dołączył: 13.10.2010 Ostrzeżenie: (0%) ![]() ![]() |
Hej mam takie pytanie
mam tabele z pracownikami firmy, w niej 6 pracownikow i 2 kierownikow. Chcialbym ich wyswietlic tak, ze jako pierwszy jest kierownik a pod nim jego trzech podwladnych. W tabeli znajduje sie kolumna w ktorej oznaczeni sa kierownicy cyfra 1. natomiast kazdy z pracownikow ma przypisana kolumne z numerem swojego kierownika W wyniku najlepiej bylo byc cos w takim rodzaju otrzymac Nazwisko Kieronik Kowalski Nowak Kowalski Klos Kowalski Gola Kowalski itd I pod nimi 2 kierownik i trzech podwladnych pod nim. Czy istaniej do tego jakas funkcja? Dodam, ze to jest pod DB2, czyli struktura drzewa z Oracla chyba nie przejdzie |
|
|
![]() |
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 651 Pomógł: 116 Dołączył: 3.06.2012 Skąd: Lędziny Ostrzeżenie: (0%) ![]() ![]() |
Nie wiem czy Cie dobrze zrozumiałem. Masz w tabeli pracowników, jest podział na 'pracowników' i kierowników. Kierownicy mają przypisane swoje ID/numery (1 i 2). Pracownicy również mają gdzieś tam w jakimś polu przypisanego swojego kierownika (1 lub 2).
Jeśli dobrze zrozumiałem to struktura mniej więcej taka: Cytat | ID_KIEROWNIKA | KIEROWNIK | NAZWISKO | IMIE | | 1 | 1 | Kowalski | Jan | | 1 | 0 | Nowak | Franciszek | | 1 | 0 | Pitagoras | Mirosław | | 2 | 1 | Indyk | Patryk | | 2 | 0 | Kura | Paweł | | 2 | 0 | Ptak | Jurek | gdzie KIEROWNIK: 1- tak, to jest kierownik, 0 - nie, to jest zwykły pracownik.
Wydaje mi się, że to powinno działać jak trzeba, aczkolwiek ręki uciąć sobie nie dam. Jeśli Twoja struktura tabeli jest inna to myślę, iż mając 8 rekordów w tabeli - nie problem tę strukturę zmienić na korzyść oczywiście (łatwiejsze wyciąganie danych) ![]() |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 21 Pomógł: 0 Dołączył: 13.10.2010 Ostrzeżenie: (0%) ![]() ![]() |
OK ale jesli w tablicy dla kierownika nie ma w kolumnie ID_kieronika wartosc 1 tylko NULL?
Oczywiscie potzrebuje tego dla wiekszej tabeli wiec zmiana struktury nie wchodzi w gre. |
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 651 Pomógł: 116 Dołączył: 3.06.2012 Skąd: Lędziny Ostrzeżenie: (0%) ![]() ![]() |
OK ale jesli w tablicy dla kierownika nie ma w kolumnie ID_kieronika wartosc 1 tylko NULL? Oczywiscie potzrebuje tego dla wiekszej tabeli wiec zmiana struktury nie wchodzi w gre. Utrudniasz sobie w ten sposób życie, o wiele przyjemniej (i dla Ciebie i dla bazy) jest bazować na wartościach liczbowych. Co to znaczy, że jest NULL? Kierownik = NULL ? Jeśli tak to jaki to typ pola? Poza tym łatwo można to przekształcić:
Jednak to zależy jaki typ pola tam zastosowałeś, najlepszy według mnie byłby tinyint(1) |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 21 Pomógł: 0 Dołączył: 13.10.2010 Ostrzeżenie: (0%) ![]() ![]() |
No ale przeciez kierownik nie ma nikogo nad soba, wiec nie moze miec tez 1. Dlatego jest null. Powiedzmy ze moze byc 0 ale to tez jest problem
trzeba w jakis sposob powiazac kierownika ze swoimi pracownikami i wyswietlic ich w postaci takie struktury drzewa. problemw tym ze to db2 i nie ma struktur drzewiastych. jakies inne rozwiazanie? |
|
|
![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 651 Pomógł: 116 Dołączył: 3.06.2012 Skąd: Lędziny Ostrzeżenie: (0%) ![]() ![]() |
Cytat No ale przeciez kierownik nie ma nikogo nad soba, wiec nie moze miec tez 1. Dlatego jest null. Powiedzmy ze moze byc 0 ale to tez jest problem Zgoda, ale kto powiedział, że musi mieć? Chodzi o to, aby można było swobodnie do bazy wykonać zapytanie i posortować to tak jak matematyka nakazała, według liczb (malejąco). Zrób screena w PHPMYADMIN struktury tej tabeli tak żeby można było myśleć nad jakimś sensownym zapytaniem. EDIT: W między czasie sprawdź:
Zobacz co to zwróci ![]() Ten post edytował Michael2318 10.03.2013, 15:04:38 |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 21 Pomógł: 0 Dołączył: 13.10.2010 Ostrzeżenie: (0%) ![]() ![]() |
Struktura jest prosta
ID Nazwisko czy_kierownik kto_kierownik Powiedzmy ze taki wynik by mnie interesowal Nazwisko Kierownik Nowak Kowalski Nowak Majek Wolski Majek Nowak jest kierownikiem wiec w kolumnie wynikowej kierownik bedzie pusto Kowalski pracuje dla Nowaka wiec w kolumnie kierwnik mamy nazwisko Nowak To samo dla nastepnych kierownikow i ich pracownikow |
|
|
![]()
Post
#8
|
|
![]() Grupa: Zarejestrowani Postów: 651 Pomógł: 116 Dołączył: 3.06.2012 Skąd: Lędziny Ostrzeżenie: (0%) ![]() ![]() |
Jednak nadal nie wiem jakie przykładowe wartości trzymasz w tabeli 'czy_kierownik' (kierownik to NULL, a pracownik?) i nie znam typu tego pola. Ten post edytował Michael2318 10.03.2013, 15:07:14 |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 21 Pomógł: 0 Dołączył: 13.10.2010 Ostrzeżenie: (0%) ![]() ![]() |
ID name is_kier his_kier
1 nowak 1 NULL 2 kuba 0 1 3 jan 0 1 4 kubicki 1 NULL 5 kuc 0 4 6 kim 0 1 Czy w takiej formie moze byc? Dokladnie taki efekt powinnismy otrzymac. Jeden kierownik, pod nim pracownicy, drugi kierownik i jego pracownik Czyli dla tych danych gosc o nazwisku kim powinien powedrowac pod jan, zeby znalesc sie pod swoim kierownikiem. |
|
|
![]()
Post
#10
|
|
![]() Grupa: Zarejestrowani Postów: 651 Pomógł: 116 Dołączył: 3.06.2012 Skąd: Lędziny Ostrzeżenie: (0%) ![]() ![]() |
Zrobiłem sobie u siebie w bazie taką samą tabelę i powiem Ci, że wyciągnięcie tego przy obecnej strukturze jest mało realne, brak punktu zaczepienia (a raczej brak wartości), aby to normalnie posegregować. Problem rozwiązuje się wtedy, gdy NULL przy kierownikach zastąpimy ich ID. Wtedy takie zapytanie:
Daje nam dokładnie to co chcesz osiągnąć. Jak zrobić, aby kierownik mający obecnie wpisane NULL w polu 'his_kier' mial tam swoje id? Wykonujemy takie zapytanie:
Zrób sobie kopie tabeli i sprawdź to co podałem. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 21.08.2025 - 09:39 |