• 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

–1 głos
83 wizyt
pytanie zadane 10 maja 2018 w SQL, bazy danych przez sapero Gaduła (3,680 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,000 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 (25,120 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 (3,680 p.)
ok fajnie to działa jednak masz tutaj 2 tabele a ja mam 3
komentarz 10 maja 2018 przez maciej.tokarz Nałogowiec (25,120 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 (3,680 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 (25,120 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 (3,680 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 (25,120 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ź 80 wizyt
pytanie zadane 16 stycznia 2018 w SQL, bazy danych przez ThreeG Nowicjusz (170 p.)
0 głosów
1 odpowiedź 47 wizyt
pytanie zadane 8 kwietnia 2018 w SQL, bazy danych przez sapero Gaduła (3,680 p.)
0 głosów
1 odpowiedź 483 wizyt
pytanie zadane 6 maja 2017 w SQL, bazy danych przez ernest4013 Gaduła (3,270 p.)
Porady nie od parady
Zadając pytanie postaraj się o odpowiedni tytuł, kategorię oraz tagi.Tagi

66,384 zapytań

113,133 odpowiedzi

239,497 komentarzy

46,640 pasjonatów

Przeglądających: 165
Pasjonatów: 0 Gości: 165

Motyw:

Akcja Pajacyk

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

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...