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
sniver
post
Post #2





Grupa: Zarejestrowani
Postów: 159
Pomógł: 5
Dołączył: 31.08.2007

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


  1. SELECT cat_name FROM cms_categories LIMIT 0, 5


to bym zrobił nieco inaczej, tylko dlatego by optymalnie działało. Bo po co np. pokazywać puste kategorie jak i tak tam nic nie ma (IMG:style_emoticons/default/smile.gif)

  1. SELECT
  2. `c`.`cat_name` AS `name`,
  3. (
  4. SELECT COUNT(1) FROM `cms_views_video` AS `v`
  5. WHERE
  6. (`v`.`video_cat_id` = `c`.`video_cat_id`)
  7. ) AS `licz`
  8.  
  9. FROM
  10. `cms_categories` AS `c`
  11.  
  12. HAVING
  13. (`LICZ` > 0)


Dalszą część zostawił bym jak jest...

Jest jeden szkopuł, jeśli stworzył byś mechanizm z zagnieżdżaniem kategorii w stylu Rodzic - dzieci - dziecko dziecka - dziecko ... - dziecko n (nie wiem czy dobrze do opisałem) musiał byś oprzeć to na jakimś liczniku..

tyle ode mnie w tej sprawie (IMG:style_emoticons/default/smile.gif)

Ten post edytował sniver 22.04.2010, 07:53:52
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: 10.10.2025 - 07:02