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

Jak powinno wyglądać zapytanie relacyjne?

Object Storage Arubacloud
0 głosów
470 wizyt
pytanie zadane 21 czerwca 2017 w SQL, bazy danych przez BlvckFox Gaduła (4,240 p.)

Witam. Posiadam 3 tabele:

W USERS przechowuje id uzytkownika i jego nick, w IMAGES id obrazka, id uzytkownika (autora obrazka) a w SIMAGES przechowuje id uzytkownika i id obrazka, który juz widział.

Moje zapytanie wygląda następująco:
 

$sql = $conn->query("SELECT images.*, users.username FROM images, users WHERE users.id = images.author ORDER BY RAND() LIMIT 1"))

Wszystko działa poprawnie ale chciałbym, żeby uzytkownik widzial tylko raz dany obrazek więc tutaj moje pytanie: Czy w SQL istnieje coś w stylu "oprócz" np. "WITHOUT images.id = simages.imgID AND users.id = simages.userID"?

Jeżeli nie to jak powinna wyglądać relacja i pytanie warunkowe lub pętla która by sprawdzała czy user id i image id w tabeli SIMAGES są takie same jak wylosowane obecnie i losowanie ma być powtórzone tyle razy ile jest wszystkich id w tabeli images a jak wszystkie zostaly juz zobaczone to wykona sie inny kod np:
"echo "Widziales juz wszystkie obrazki! Poczekaj lub dodaj wlasny!"

komentarz 21 czerwca 2017 przez X3h Dyskutant (9,540 p.)

Select * From IMAGES Where id In (Select id From IMAGES Union All Select imgID as id From SIMAGES Where userID = (Select id From USERS Where name = 'imię'))

Być może Union poprawnie odejmie id z IMAGES i imgID jako id z SIMAGES wtedy powinieneś uzyskać wszystkie id IMAGES nie widzianych przez użytkownika o podanym imieniu. Na końcu bez problemu powinieneś wybrać IMAGES po id zawierających się we wcześniej znalezionych id. 

komentarz 21 czerwca 2017 przez Ehlert Ekspert (212,670 p.)
Select * From IMAGES Where id In (Select id From IMAGES Union All Select imgID as id From SIMAGES Where userID = (Select id From USERS Where name = 'imię'))

No to jest morderstwo serwera. Słyszałeś może o JOIN??

1
komentarz 22 czerwca 2017 przez X3h Dyskutant (9,540 p.)
Myślę że moja propozycja rozwiązania tego skomplikowanego zapytania jest całkiem w porządku. Daj znać jak napiszesz swoją idee. Powiedz również gdzie i dlaczego jesteś pewien, że Join zmieniłby cokolwiek. Być może serwer SQL zaplanuje akurat twój przypadek dużo lepiej. W sumie to fajnie byłoby zobaczyć mapę twojego zapytania w stosunku do mojego. Musimy przecież na czymś się opierać aby znaleźć najlepsze rozwiązanie. Czekam i pozdrawiam.

1 odpowiedź

0 głosów
odpowiedź 21 czerwca 2017 przez Patryk Rafał Bywalec (2,700 p.)
jak bym zrobił to tak pobrał sobie w licznik wszystkie zdjęcia czyli select count(*) from nazwa tabeli
i po wyświetleniu każdego licznik dekrementował aż do zero i wtedy wypisywał "echo "Widziales juz wszystkie obrazki! Poczekaj lub dodaj wlasny!"

Podobne pytania

0 głosów
1 odpowiedź 964 wizyt
0 głosów
0 odpowiedzi 294 wizyt
pytanie zadane 17 lutego 2021 w SQL, bazy danych przez icytower Bywalec (2,110 p.)
0 głosów
0 odpowiedzi 177 wizyt
pytanie zadane 16 września 2023 w SQL, bazy danych przez martinez369 Początkujący (460 p.)

92,539 zapytań

141,381 odpowiedzi

319,465 komentarzy

61,926 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!

...