• 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

VPS Starter Arubacloud
–1 głos
188 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ź 172 wizyt
pytanie zadane 16 stycznia 2018 w SQL, bazy danych przez ThreeG Nowicjusz (170 p.)
0 głosów
1 odpowiedź 123 wizyt
pytanie zadane 8 kwietnia 2018 w SQL, bazy danych przez sapero Gaduła (4,100 p.)
0 głosów
0 odpowiedzi 93 wizyt
pytanie zadane 20 stycznia 2021 w SQL, bazy danych przez Piotr Jarema Użytkownik (970 p.)

92,452 zapytań

141,262 odpowiedzi

319,080 komentarzy

61,854 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

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 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!

...