Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Odwrotne zapytanie SQL, Prośba o pomoc w skonstruowaniu optymalnego zapytania sql
yalus
post 20.12.2012, 12:11:47
Post #1





Grupa: Zarejestrowani
Postów: 281
Pomógł: 0
Dołączył: 8.07.2005
Skąd: EU

Ostrzeżenie: (0%)
-----


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

Ten post edytował yalus 20.12.2012, 15:06:34


--------------------
człowiek nie sznurek wszystko wytrzyma
Go to the top of the page
+Quote Post
sowiq
post 20.12.2012, 12:15:53
Post #2





Grupa: Zarejestrowani
Postów: 1 890
Pomógł: 339
Dołączył: 14.12.2006
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
yalus
post 20.12.2012, 14:58:42
Post #3





Grupa: Zarejestrowani
Postów: 281
Pomógł: 0
Dołączył: 8.07.2005
Skąd: EU

Ostrzeżenie: (0%)
-----


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. )


Ten post edytował yalus 20.12.2012, 15:49:21


--------------------
człowiek nie sznurek wszystko wytrzyma
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 09:55