![]() |
![]() ![]() |
![]() |
![]()
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:
Następnie tworzymy drugie zapytanie, które wyciąga po 4 filmy do danej kategorii, wyglądające mniej więcej tak:
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? |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 1 568 Pomógł: 192 Dołączył: 7.03.2005 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Ja bym zrobił inaczej, pobieram kategorie, robie LEFT JOIN video i pobieram rekordy wideo gdzie video_cat_id ON cat_id, jedno krotkie zapytanie.
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 278 Pomógł: 10 Dołączył: 13.02.2007 Skąd: Rybnik Ostrzeżenie: (0%) ![]() ![]() |
No ok, a w jaki sposób wyciągniesz określoną ilość filmów dla danej kategorii?
|
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 159 Pomógł: 5 Dołączył: 31.08.2007 Ostrzeżenie: (0%) ![]() ![]() |
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)
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 |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 278 Pomógł: 10 Dołączył: 13.02.2007 Skąd: Rybnik Ostrzeżenie: (0%) ![]() ![]() |
@Sniver, podałeś dokładnie to samo co ja, tylko jeszcze mniej optymalne (samo "having" jest dość ciężkie).
Bardziej zależy mi na optymalnym rozwiązaniu mojego problemu poprzez jedno zapytanie. |
|
|
![]()
Post
#6
|
|
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 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 |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 28 Pomógł: 4 Dołączył: 13.11.2009 Ostrzeżenie: (0%) ![]() ![]() |
Kod SELECT *
FROM ( SELECT c.* FROM category c, (SELECT @L:=0, @C:=0) init -- WHERE cat.id IN (1,2,3) -- ewentualnie ręczny wybór kategorii LIMIT /* liczba kategorii: */ 5 ) c LEFT JOIN video v ON IF(video_cat_id = cat_id AND IF(@L=cat_id,@C:=@C+1,(@L:=cat_id) AND @C:=0) <= /* liczba video: */ 5 ,1,0) |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 278 Pomógł: 10 Dołączył: 13.02.2007 Skąd: Rybnik Ostrzeżenie: (0%) ![]() ![]() |
@aio: To co napisałeś wydaje się być działającym rozwiązaniem, ale czy na pewno szybszym od tego co ja zaproponowałem? Jak z wydajnością takich zapytań?
|
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 28 Pomógł: 4 Dołączył: 13.11.2009 Ostrzeżenie: (0%) ![]() ![]() |
@aio: To co napisałeś wydaje się być działającym rozwiązaniem, ale czy na pewno szybszym od tego co ja zaproponowałem? Jak z wydajnością takich zapytań? ich weiss nicht - ale mógłbyś sprawdzić, i pewnie nikt by nie miał za złe gdybyś ogłosił wyniki (IMG:style_emoticons/default/winksmiley.jpg) dałem warunek do ON żeby filtrowało na jak najniższym poziomie. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 21.09.2025 - 17:33 |