Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Odwrotne zapytanie SQL
Forum PHP.pl > Forum > Bazy danych > MySQL
yalus
Witam,

W bazie danych mam trzy tabele, (tak jak są przedstawione na dołączonym obrazku)



Chciałbym z tych trzech tabel wybrać interesujące mnie dane wg. moich warunków:

Warunek 1.
Dla użytkownika o id = 1 chciałbym wybrać filmy, których jeszcze nie obejrzał.

Warunek 2.
Dla użytkownika o id = 1 chciałbym wybrać filmy, które już obejrzał

zapytanie pod warunek 2, chyba wygląda tak:

  1. SELECT
  2. users.imie,
  3. filmy.tytul_filmu
  4. FROM
  5. filmy
  6. INNER JOIN obejrzane ON (filmy.id = obejrzane.filmy_id)
  7. INNER JOIN users ON (obejrzane.users_id = users.id)
  8. WHERE
  9. users.id = 1



a jak wyglądało by zapytanie pod warunek 1, bardzo proszę o pomoc


z góry wielkie dzięki
pozdrawiam
sowiq
Poczytaj i pomyśl przez chwilę, a na pewno znajdziesz rozwiązanie:

IN / NOT IN: http://dev.mysql.com/doc/refman/5.0/en/com...tml#function_in

EXISTS / NOT EXISTS: http://dev.mysql.com/doc/refman/5.0/en/exi...subqueries.html
yalus
ok dzieki wink.gif

a które rozwiązanie będzie bardziej optymalne?,

przewiduję w tych tabelach zamieścić do 1 000 000 rekordów

i jak samo zapytanie powinno wyglądać, czy to moje jest optymalne dla tego warunku? czy dało by się je jeszcze jakoś zoptymalizować?


pozdrawiam i proszę o któtką konsultacje wink.gif



ok, udało mi się wyskrobać coś takiego ale słyszałem, że zapytania z pod zapytaniami są bardzo wolne czy to jest prawda?
Jak to się będzie sprawdzać jak w tych tabelach będzie po 1 000 000 rekordów?


  1. SELECT * FROM
  2. users,
  3. filmy
  4. WHERE
  5. users.id = 1 AND
  6. filmy.id NOT IN (SELECT
  7. obejrzane.filmy_id
  8. FROM
  9. obejrzane
  10. WHERE
  11. obejrzane.users_id = 1
  12. )
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-2024 Invision Power Services, Inc.