Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> index podzapytania
nospor
post
Post #1





Grupa: Moderatorzy
Postów: 36 559
Pomógł: 6315
Dołączył: 27.12.2004




Hejka, mam taką zagwostkę:
Jest sobie zapytanie:
  1. SELECT @nr:=@nr+1,IF(ID=@id, @idnr := @nr,@idnr=@idnr),ID FROM f_post WHERE FK_TOPIC=2 ORDER BY f_post.ID ASC

No i ładnie mi bierze index FK_TOPIC.
Explain:
Cytat
idselect_typetabletypepossible_keyskeykey_lenrefrowsExtra
1 SIMPLE f_post ref FK_TOPIC FK_TOPIC 4 const 2 Using where; Using filesort
Wziął mi pod uwagę dwa rekordy.

Daję teraz to w podzapytanie:
  1. SELECT @idnr AS nr FROM
  2. (SELECT @nr:=@nr+1,IF(ID=@id, @idnr := @nr,@idnr=@idnr),ID FROM f_post WHERE FK_TOPIC=2 ORDER BY f_post.ID ASC ) podsel WHERE podsel.ID = @id;

I już mi nie uwzględnia FK_TOPIC jako klucza
Cytat
idselect_typetabletypepossible_keyskeykey_lenrefrowsExtra
1 PRIMARY <derived2>ALL(NULL)(NULL)(NULL)(NULL)2Using where
2 DERIVED f_post ALL FK_TOPIC FK_TOPIC 4 118 Using filesort

Bierze pod uwagę wszystkie rekordy (118)

O co chodzi?Mam chwilowe zaćmienie związane z poszukiwaniem samochodu (IMG:style_emoticons/default/smile.gif)

ps: wystarczy ze wywalę ORDER BY ID asc i już gra jak ta lala, szuka po dwóch rekordach.
Czemu normalnie dziala niezależnie od order by, a w podzapytaniu trzeba wywalic order by by poszło normalnie
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
nospor
post
Post #2





Grupa: Moderatorzy
Postów: 36 559
Pomógł: 6315
Dołączył: 27.12.2004




@wookieb bo widzisz, zależy jak leży (IMG:style_emoticons/default/winksmiley.jpg)

No to dodajmy to pole, co się teraz dzieje:
mamy pole POSITION.
Dodajemy nowy post, sprawdzamy jaka jest pozycja ostatniego i dla nowego ustalamy o 1 większą. Ok
Usuwamy post ze środka - musimy wyliczyć na nowo pozycje dla wszystkich postów leżących za usuniętym - też żaden problem.
Chcemy pobrać pozycję posta - jedno proste zapytanie bez babrania się w podzapytania.
=
Same plusy.

Ale......
co, gdy w przyszłości będę chciał rozwinąć forum i dodać np. możliwość okreslania przez użytkowników, w jakiej kolejności chcą wyświetlać posty (rosnąca,malejąca)? Nie będę mógł już skorzystać z POSITION, bo ono będzie tylko dla ASC. A użytkownik wybierze sobie DESC i zonk. Rozwiązaniem byłoby dodanie pola POSITION_DESC.

W sumie to też nie głupi pomysł.
Widzicie jeszcze jakieś przypadki, gdzie POSITION było by złe? jakieś inne wyświetlanie postów? Zazwyczaj to raczej posty wyświetla się po dacie.

Z drugiej strony to podzapytanie co tu przedstawiłem też działa szybko.
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: 11.10.2025 - 18:00