Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Pomoc w optymalizacji zapytania
Forum PHP.pl > Forum > Bazy danych > MySQL
yalus
Witam,

mam takie oto zapytanie:

  1. SELECT
  2. id,
  3. tytlu,
  4. users_id,
  5. FROM
  6. ksiazki
  7. WHERE
  8. tytul LIKE "samochody" AND
  9. users_id <> 1 AND
  10. id NOT IN (SELECT ksiazki_id FROM przeczytane WHERE users_id = 1 AND ksiazki_id = id)


w skrócie wyjaśnie o co chodzi:

mam baze danych w ktorej znajdują się dwie tabele: ksiazki i przeczytane
struktura ksiazki to: id | tytul | users_id
struktura przeczytane to: ksiazki_id | users_id


kazdy uzytkownik widzi zawartosc tabeli ksiazki, jezeli znajdzie w jej zawartosci tytul ktory juz przeczytal to klika w link 'przeczytane' i do tabeli przeczytane wedruje id danej ksiazki i id użytkownika

i teraz w tym moim zapytaniu chodzi o to aby każdemu użytkownikowi wyświetlać tylko tytuły, których jeszcze nie przeczytał. Zapytanie to działa poprawnie i zwraca to co chcę ale wykorzystałem w nim podzapytanie które to bardzo ale to bardzo zwiększyło czas wykonania skryptu.

Czy jest jakaś możliwość aby to zapytaniue sformuować inaczej? aby czas wykonania nie był aż tak duży??

dodam tylko że w tabeli książki mam około 2000 pozycji a w tabeli przeczytane około 100000 rekordów


pozdrawiam



nospor
JOIN i IS NULL
  1. SELECT
  2. k.id,
  3. k.tytlu,
  4. k.users_id,
  5. FROM
  6. ksiazki k
  7. LEFT JOIN przeczytane p ON (p.users_id = 1 AND p.ksiazki_id = k.id)
  8. WHERE
  9. k.tytul LIKE "samochody" AND
  10. k.users_id <> 1 AND
  11. p.users_id IS NULL

Sephirus
  1. SELECT * FROM ksiazki k
  2. LEFT JOIN przeczytane p
  3. ON
  4. k.id = p.ksiazki_id
  5. AND
  6. p.users_id = $id
  7. WHERE k.users_id = $id AND p.ksiazki_id IS NULL


gdzie $id to ID użytkownika dla którego ma to działać
yalus
dzieki wam Panowie,

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