Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [inne][MySQL][PHP]Dwa problemy z wyszukiwarką: najpopularniejsze i "miliony" rekordów
bordovy
post
Post #1





Grupa: Zarejestrowani
Postów: 46
Pomógł: 0
Dołączył: 11.11.2015

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


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ś...?
Go to the top of the page
+Quote Post
trueblue
post
Post #2





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

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


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).
Go to the top of the page
+Quote Post

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: 23.08.2025 - 06:22