Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [SQL] Struktura firmy w SQL w DB2
kubagogo
post
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
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 9)
Michael2318
post
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.

  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
Go to the top of the page
+Quote Post
kubagogo
post
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.
Go to the top of the page
+Quote Post
Michael2318
post
Post #4





Grupa: Zarejestrowani
Postów: 651
Pomógł: 116
Dołączył: 3.06.2012
Skąd: Lędziny

Ostrzeżenie: (0%)
-----


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)
Go to the top of the page
+Quote Post
kubagogo
post
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?
Go to the top of the page
+Quote Post
Michael2318
post
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ź:

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


Zobacz co to zwróci smile.gif

Ten post edytował Michael2318 10.03.2013, 15:04:38
Go to the top of the page
+Quote Post
kubagogo
post
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
Go to the top of the page
+Quote Post
Michael2318
post
Post #8





Grupa: Zarejestrowani
Postów: 651
Pomógł: 116
Dołączył: 3.06.2012
Skąd: Lędziny

Ostrzeżenie: (0%)
-----


  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.

Ten post edytował Michael2318 10.03.2013, 15:07:14
Go to the top of the page
+Quote Post
kubagogo
post
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.
Go to the top of the page
+Quote Post
Michael2318
post
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:

  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.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 21.08.2025 - 09:39