• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

problem z wynikiem SQL połącznie tabel

Object Storage Arubacloud
–1 głos
195 wizyt
pytanie zadane 10 maja 2018 w SQL, bazy danych przez sapero Gaduła (4,100 p.)

Cześć wie może ktoś jak zrobić żeby przypisać nazwę rodzica do dziecka? dziecko i rodzic są w tej samej tabeli "Users" powiązani są ze sobą taki samym "director_id"

a w tabeli "users_role" każde id które ma w "role=5" jest rodzicem user_id są takie same jak w tabeli"Users"..
coś tam próbowałem zrobić ale nie wychodzi:(

chodzi o to żeby otrzymać 

Rodzic | Dziecko | punkty

Rodzic Adama | Adam | 25
http://sqlfiddle.com/#!9/2541b1

2 odpowiedzi

0 głosów
odpowiedź 23 maja 2018 przez Catalonya1992 Mądrala (5,440 p.)
wybrane 28 maja 2018 przez sapero
 
Najlepsza
Nie jestem pewien czy dobrze zrozumiałem, ale może potrzebujesz connect by i funkcji sys_connect_by_path? Dostaniesz ścieżkę i będziesz mógł wybrać separator. Tak jak ktoś wyżej pisał, potrzebne są podstawy. Tutaj możesz rozpocząć naukę i zabrać solidnych podstaw:
https://www.youtube.com/watch?v=M8WNqp5XLM8
0 głosów
odpowiedź 10 maja 2018 przez maciej.tokarz Nałogowiec (27,280 p.)
edycja 10 maja 2018 przez maciej.tokarz

Możesz spróbować np. tak. Nie analizowałem wydajności, ale dla użytkowników posiadających rodzica pokaże punkty.

Edit: można dodać jako pierwszy rekord użytkownika: "Nie ma rodzica" i wtedy pokaże wyniki dla wszystkich użytkowników posiadających jakąś punktację - przykład.

M.

komentarz 10 maja 2018 przez sapero Gaduła (4,100 p.)
ok fajnie to działa jednak masz tutaj 2 tabele a ja mam 3
komentarz 10 maja 2018 przez maciej.tokarz Nałogowiec (27,280 p.)

W Twoim przykładzie brakuje chyba tabeli z rolami:

CREATE TABLE Roles (
  id INT NOT NULL AUTO_INCREMENT,
  name VARCHAR(20) NOT NULL,
  PRIMARY KEY (id),
  UNIQUE KEY Name (name)
);

oraz UsersInRoles:

CREATE TABLE UsersInRoles (
  userId INT NOT NULL,
  roleId INT NOT NULL,
  PRIMARY KEY (userId, roleId),
  CONSTRAINT UsersUsersInRoles
    FOREIGN KEY (userId)
    REFERENCES Users (id)
    ON DELETE CASCADE
    ON UPDATE CASCADE,
  CONSTRAINT RolesUsersInRoles
    FOREIGN KEY (roleId)
    REFERENCES Roles (id)
    ON DELETE CASCADE
    ON UPDATE CASCADE
);

Odnośnie Twojego zadania nie bardzo je rozumiem, spróbuj samemu zaproponować jakieś rozwiązanie.

M.

 

komentarz 10 maja 2018 przez sapero Gaduła (4,100 p.)

W TABELI ROLE TAM GDZIE USER MA FLAGĘ ROLE=1 OZNACZA ŻE JEST RODZICEM TEN USER
W CHWILE OBECNEJ PRZYPISUJE RODZICA DO DZIECKA KORZYSTAJAĆ TYLKO Z 2 TABEL A CHCIAŁBYM ŻEBY ROZPOZNAWAŁO
RODZICA PRZEZ PORÓWNANIE userId w TABELI Roles ma 1 TO JEST RODZICEM TO ID NASTĘPNIE TRZEBA BY BYŁO PRZYPISAĆ
DO TEGO UserID DZIECKO KTÓRE MA TO SAMO parentId A NESTĘPNIE ZSUMOWAĆ DLA TEGO DZIECKA DIAMENTY :)

CREATE TABLE Roles (
  id INT NOT NULL AUTO_INCREMENT,
  userId VARCHAR(50) NOT NULL,
  role VARCHAR(50) NOT NULL,
  PRIMARY KEY (id, userId)
);

INSERT INTO Roles (userId, role) VALUES (1, 0);
INSERT INTO Roles (userId, role) VALUES (2, 1);
INSERT INTO Roles (userId, role) VALUES (3, 1);
INSERT INTO Roles (userId, role) VALUES (4, 1);
INSERT INTO Roles (userId, role) VALUES (5, 0);
INSERT INTO Roles (userId, role) VALUES (6, 0);
INSERT INTO Roles (userId, role) VALUES (7, 0);
INSERT INTO Roles (userId, role) VALUES (7, 0);

 

komentarz 10 maja 2018 przez maciej.tokarz Nałogowiec (27,280 p.)

Kilka pytań:

  1. dlaczego stosujesz typ VARCHAR na identyfikatorze?
  2. dlaczego role=1 jest również VARCHAR, a przecież identyfikujesz te role po liczbie?
  3. dlaczego zacząłeś krzyczeć? Zapoznaj się z netykietą, nie nadużywa się pisowni wielką literą.

W zasadzie tyle - jeśli to czy dany user jest rodzicem ma zależeć od jego roli równej jeden, to przepraszam po co stosować w tabeli Users dodatkową informację director_id (u mnie parentId)? Przecież jeśli użytkownik dziecko będzie miało podany identyfikator rodzica w polu parentId czy director_id to żadne role nie są potrzebne, bo można sprawdzić na tej podstawie hierarchię. Zastanów się jeszcze raz co chcesz osiągnąć.

M.

komentarz 11 maja 2018 przez sapero Gaduła (4,100 p.)
przepraszam jeśli odebrałeś tekst napisany wielkimi literami jako krzyk, ale nie o to chodziło mi... piszę tutaj bo nie jestem dobry z SQL i te błędy są wynikiem mojej niewiedzy do dość skomplikowanych zapytań... no to nie je projektowałem tą bazę mam taką jaką mam bazę próbuje coś zdziałać:)
komentarz 11 maja 2018 przez maciej.tokarz Nałogowiec (27,280 p.)

Ok, ćwicz! Nie jest to skomplikowane co próbujesz osiągnąć, ale bez podstaw będzie ciężko - warto poczytać...

M.

Podobne pytania

0 głosów
1 odpowiedź 174 wizyt
pytanie zadane 16 stycznia 2018 w SQL, bazy danych przez ThreeG Nowicjusz (170 p.)
0 głosów
1 odpowiedź 131 wizyt
pytanie zadane 8 kwietnia 2018 w SQL, bazy danych przez sapero Gaduła (4,100 p.)
0 głosów
0 odpowiedzi 94 wizyt
pytanie zadane 20 stycznia 2021 w SQL, bazy danych przez Piotr Jarema Użytkownik (970 p.)

92,539 zapytań

141,382 odpowiedzi

319,476 komentarzy

61,928 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...