Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [SQL] Struktura firmy w SQL w DB2
Forum PHP.pl > Forum > Przedszkole
kubagogo
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
Michael2318
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.

  1. SELECT * FROM `tabela` ORDER BY id_kierownika ASC, kierownik DESC;


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) wink.gif
kubagogo
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.
Michael2318
Cytat(kubagogo @ 10.03.2013, 14:23:40 ) *
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ć:

  1. UPDATE `tabela` SET id_kierownika = 1 WHERE id_kierownika = NULL;


Jednak to zależy jaki typ pola tam zastosowałeś, najlepszy według mnie byłby tinyint(1)
kubagogo
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?
Michael2318
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ź:

  1. SELECT * FROM `tabela` ORDER BY id_kierownika IS NULL ASC, kierownik DESC;


Zobacz co to zwróci smile.gif
kubagogo
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
Michael2318
  1. SELECT * FROM `tabela` ORDER BY czy_kierownik IS NULL ASC, kto_kierownik DESC;


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.
kubagogo
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.
Michael2318
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:

  1. SELECT * FROM `pracownicy` ORDER BY his_kier ASC, is_kier DESC;


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:

  1. UPDATE `pracownicy` AS t1 LEFT JOIN `pracownicy` AS t2 ON t1.id = t2.id SET t1.his_kier = t2.id WHERE t1.his_kier IS NULL


Zrób sobie kopie tabeli i sprawdź to co podałem.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.