Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL] złożone zapytanie select
Forum PHP.pl > Forum > Przedszkole
zaqaz
Witam,
Chciałbym prosić o pomoc w sformułowaniu zapytania sql, które jak dla mnie (od kilku godziń człowieka który musi znać sql) jest niemożliwe do wykonania.

Zadanie (na ocalenia tyłka w szkole) polega na zbudowaniu zapytanie które operuje na trzech tabelach w jednej bazie.

Tabele:
tabela users
id | name | username | email
1 | emil | zaqaz | emil@email.pl

tabela baza_ip
id | id2 | ip
1(users_id) | 42 | 255.255.255.255

tabela result

id | id2 | position | number
X | 42(users2_id) | 10 | 12

ilość rekordów w każdej z nich "ma być dowolnie duża", ponadto, w tabeli baza_ip ip może powtarzać się dowolną ilość razy, dla dowolnego id (po mojemu, wielu użytkowników z tym samym ip?)
a w tabeli results dowolne id2 może posiadać dowolną ilość rekordów z rożnymi parametrami position i number (user id=42 może mieć position 10, 12 i 3 jednocześnie, number definiuje częstotliwość dla position)
edit: a gdyby założyć, że to zakup produktu i jego ilość - dla celów zobrazowania?

wynik zapytania miałby być następujący:

na bazie ip określić imiona i maile użytkowników oraz parametry position i number
przykładowy wynik:
emil emil@email.pl 10 12
emil emil@email.pl 1 19
emil2 emil@email.pl 7 12
emil3 emil@email.pl 15 12

Tak oto przyszły hotelarz walczy o przetrwanie na informatyce.
Próbowałem skontrować sam jakieś zapytanie ale szczytem finezji było zliczenie ile rekordów ma to samo ip lub imię, to mnie przerasta.

Mam nadzieję, że znajdzie się dobra dusza które pomoże mi się z tym uporać, z góry dziękuje za wsparcie.
Zielonkawy18
Proponuje abyś po ludzku nazwał tabele, opisał co ma się dziać i wtedy sklepiemy te zapytanie. Nie rozumiejąc modelowanego wycinka rzeczywistości jest to trochę bezsensowne smile.gif

Pozdrawiam
zaqaz
Cały szpil polega na tym, że to forma naturalna, tak mam skonstruowane zadanie.

Ja to to rozumiem, tak, że w wyniku zapytania mam dostać listę userów i ich akcji/lub zajmowanych miejsc na bazie głosów? bazując na IP.

Trudno mi to odnieść do czegoś, bo o ile wydaje mi się to (w miarę) sensowne działanie, to np. zmiana "treści" zdania tak by mechanizm był taki sam w ogóle mnie przerasta.

Zmieniłem tytuł drugiej tabeli z users2 na baza_ip ale w praktyce nic to nie zmienia...
Zielonkawy18
Jeden użytkownik może mieć wiele adresów IP ( ok ), czym jest tabela Result ponawiam??

  1. CREATE TABLE uzytkownicy(
  2. id_uzytkownika integer NOT NULL PRIMARY KEY,
  3. imie text NOT NULL,
  4. nick text NOT NULL,
  5. e_mail text NOT NULL)
  6.  
  7. CREATE TABLE baza_ip(
  8. id_ip integer NOT NULL PRIMARY KEY,
  9. id_uzytkownika integer NOT NULL,
  10. ip text NOT NULL)
  11.  
  12. ALTER TABLE baza_ip ADD constraint f_id_uzytkownika FOREIGN KEY(id_uzytkownika) REFERENCES uzytkownicy(id_uzytkownika);
  13.  
  14. CREATE TABLE rezultaty(
  15. id_rezultatu integer NOT NULL,
  16. id_uzytkownika integer NOT NULL,
  17. pozycja integer NOT NULL,
  18. liczba integer NOT NULL,
  19. )
  20.  
  21. ALTER TABLE rezultaty ADD constraint f2_id_uzytkownika FOREIGN KEY(id_uzytkownika) REFERENCES uzytkownicy(id_uzytkownika);


  1. SELECT u.imie, u.e_mail, r.pozycja, r.liczba FROM uzytkownicy u, rezultaty r WHERE u.id_uzytkownika= r.id_uzytkownika AND u.id_uzytkownika=1


Tutaj przez to zapytanie dostaniemy e_mail, pozycje i oraz imię użytkownika o id_uzytkownika=1. Można też robić selekecje po IP, w sumie to nie wiem za bardzo o co chodzi.
zaqaz
Po usilnym błaganiu o namalowanie pytania dowiedziałem się, że tabela result może (na cele przykładu) służyć jaka baza odpowiedzi w ankiecie. User może udzielić wielu odpowiedzi, wiele razy. I tak, result_position to nr odpowiedzi (trzymany w innej tabeli, ale nie ma potrzeby podstawiania) a result_position o ile razu user wybrał tą odpowiedz - czyli jak dla mnie hitrate usera dla danej odpowiedzi.

Nie dyskutuję z logicznością tabel, bo te mam narzucone, do tego mam dorobić pytanie select tak, żeby osiągnąć opisany w pierwszym poście rezultat (dla przypomnienia), warunek where, lub jeden z nich bo chyba to wymaga jakiegoś zagnieżdżania, my być równy zdefiniowanemu z palca IP.

Czy takie uzupełnienie wystarczy, czy o coś jeszcze powinienem dopytać? Poza zasadnością gnębienia uczniów takimi wygibasami na tym kierunku... wink.gif


Wymyśliłem sobie jeszcze taką rzecz...

  1. SELECT * FROM result AS v, users AS u WHERE v.user_id = u.user2 AND u.ip = "255.255.255.255"


pytanie dodatkowe brzmi, da się jakoś usunąc hurtem takie rekordy? zapytanie delete z tym samym warunkiem nie pomogło...
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.