Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [inne][MySQL][PHP]Dwa problemy z wyszukiwarką: najpopularniejsze i "miliony" rekordów
Forum PHP.pl > Forum > Przedszkole
bordovy
Cześć.
Sprawa dotyczy mojej wyszukiwarki.
Tabela slowa ma dwa pola: id, slowo

Jak to działa? Ktoś wchodzi na wyszukiwarkę, wpisuje jakąś frazę, a z kolei ona zostaje DOPISANA jako kolejny rekord do tej tabeli. Tak więc szału nie ma - to działa.

Dziennie przybywa jakieś 500-700 rekordów, więc nietrudno się domyślić, że terazjest to kilkadziesiąt tysięcy rekordów i jak tak dalej pójdzie, to za "chwilę" będzie to kilkaset tysięcy rekordów, a później milion(y)...

OK. Teraz do rzeczy, bo najpierw chciałem naświetlić co i jak hula.

Chcę wyświetlić powiedzmy 10 najpopularniejszych rekordów (czyli tych fraz, które wpisują użytkownicy do wyszukiwarki).
  1. $result = mysql_query("SELECT DISTINCT `slowo` FROM slowa LIMIT 10");
  2. while($r = mysql_fetch_array($result)) {
  3.  
  4. $id = $r['id'];
  5. $slowo = $r['slowo'];
  6.  
  7.  
  8. echo'<p style="...">'.$punkt.''.$slowo.'</p>';
  9.  
  10. }


Przeczytałem m.in. temat:
http://forum.php.pl/lofiversion/index.php/t136996.html
i zdurniałem kompletnie... Tam był problem z trzema tabelami, ja mam jedną...

Wiem, że czegoś brakuje w tym zapytaniu (count...? group by...?). Jak to ugryźć?


Sprawa druga to te "miliony" rekordów.
Poradźcie mi proszę, czy w ogóle jest sens mieć jedną tabelę... Czy nie lepiej np. byłoby stworzyć drugą i powiedzmy codziennie o danej godzinie (np. 00:01) zliczać wszystkie rekordy z poprzedniego dnia, pogrupować je (czy się powtarzają-o tym za moment*), dodać wyniki do drugiej tabeli, a z tej pierwszej wszystko usunąć - i tak codziennie...

* o tym za moment:
może się też zdarzyć, że np. frazy z "wczoraj" (już te pogrupowane i dołączane do tej drugiej tabeli) będą się znowu powtarzać z tymi z "przedwczoraj"...
Serio - zgłupiałem...

Ktoś...? Coś...?
trueblue
Skoro chcesz zliczyć, to COUNT, o którym wspomniałeś.

Albo załóż indeks na pole slowo, albo załóż drugą tabelę z polami slowo i licznik (indeks unikalny na slowo).
W przypadku wpisywania słowa robisz INSERT ON DUPLICATE (albo wstawiasz, albo zwiększasz licznik). Właściwie, to wydaje mi się, że ta pierwsza tabela w tym przypadku nie jest potrzebna (druga ją zastąpi).
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.