Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP][SQL]Optymalne wyciąganie rekordów z danej kategorii
matix
post
Post #1





Grupa: Zarejestrowani
Postów: 278
Pomógł: 10
Dołączył: 13.02.2007
Skąd: Rybnik

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


Siema,
pytanie do mądrzejszych ode mnie i bardziej doświadczonych. W jaki sposób wyciągacie n rekordów z x kategorii. Przykład?

Cytat
Pobierz 5 kategorii oraz po 5 filmów do każdej z nich.

Zakładając, że schemat bazy jest bardzo prosty

Kod
category:
cat_id
cat_name

video:
video_title
video_cat_id (references cat_id)


Obecnie po głębszych przemyśleniach moje rozwiązania:

1. wyciągamy np. 5 kategorii zapytaniem:
  1. SELECT cat_name FROM cms_categories LIMIT 0, 5


Następnie tworzymy drugie zapytanie, które wyciąga po 4 filmy do danej kategorii, wyglądające mniej więcej tak:
  1. (SELECT video_id,video_title,video_length,video_image,video_views,video_rating,video_cat_id,video_service_id FROM cms_views_video WHERE video_cat_id = 10 AND video_state = 1 LIMIT 0, 4)
  2. UNION
  3. (SELECT video_id,video_title,video_length,video_image,video_views,video_rating,video_cat_id,video_service_id FROM cms_views_video WHERE video_cat_id = 9 AND video_state = 1 LIMIT 0, 4)
  4. UNION
  5. (SELECT video_id,video_title,video_length,video_image,video_views,video_rating,video_cat_id,video_service_id FROM cms_views_video WHERE video_cat_id = 8 AND video_state = 1 LIMIT 0, 4)


2. Jedno duże zapytanie JOIN. To akurat mój nowy pomysł, jednak nie wiem jakby takie zapytanie miało wyglądać. Generalnie wyglądałoby to mniej więcej tak, że te 2 zapytania byłyby ze sobą połączone, prawdopodobnie to drugie byłoby warunkiem WHERE cat_id IN (), jednak to jest znacznie bardziej skomplikowane.

Więc teraz pytanie do Was, w jaki sposób rozwiązujecie takie rzeczy?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
WoGuziczek
post
Post #2





Grupa: Zarejestrowani
Postów: 52
Pomógł: 0
Dołączył: 17.09.2008

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


Gdybym ja zaczął robić coś takiego utworzyłbym nową kolumnę count w tabeli category.
Po wykonaniu tego trzeba w miejscu gdzie dodajesz/usuwasz filmy dodać odpowiedni skrypt, który doda lub odejmie od licznika w zależności od tego co zrobisz.
Po zrobieniu tego jednorazowo trzeba odpalić mały skrypcik, który wykona
  1. SELECT COUNT(*) WHERE video_cat_id = 'tutaj id kazdej kategorii pobranej zapytaniem przez SELECT cat_id FROM category'
dla każdej kategorii i zapisze w kolumnie count ilość filmów się w niej znajdujących.

Teraz już masełko, bo robisz tak jak polecił potreb.
Jedno małe zapytanie z jednym LEFT JOIN

Ten post edytował WoGuziczek 24.04.2010, 15:56:11
Go to the top of the page
+Quote Post

Posty w temacie


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

 



RSS Aktualny czas: 7.10.2025 - 18:14