Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][SQL] Jak pobrać z kolumny 10 rekordów, które powtarzają się najczęściej ?
Forum PHP.pl > Forum > Przedszkole
piotrek1984
Witam,

Mam malutki problem, chciałbym pobrać z kolumny np. 10 rekordów najczęściej powtarzających się. W kolumnie zapisywany jest id artykułu. Będę próbował napisać skrypt, który wyświetli najczęściej komentowane artykuły. Panowie, dobrze zaczynam kombinować ? winksmiley.jpg
blooregard
Cytat
Panowie, dobrze zaczynam kombinować ?

Źle.
W tabeli z artykułami dajesz kolumne 'komentarze', którą inkrementujesz po każdym dodanym komentarzu (dla odpowiedniego artykułu).

Potem wystarczy tylko:
  1. SELECT * FROM artykuly ORDER BY komentarze DESC LIMIT 0,10


Twój sposób spwodowałby, że za każdym razem musiałbyś bawic się w grupowanie w tabeli z komentarzami po ID artykułu, którego dotyczą, potem JOIN-owanie danych z tabeli 'artykuły' po tym ID i podobne rzeźby.
skowron-line
count
group by
SELECT / LIMIT
cojack
Cytat
W tabeli z artykułami dajesz kolumne 'komentarze', którą inkrementujesz po każdym dodanym komentarzu (dla odpowiedniego artykułu).


Źle.

Tworzysz osobną tabelę dla komentarzy artykułów. Count na id komentarzy dla danego id artykułu i tak jak wyżej orderby na tego counta i limit.

VGT
Cytat(cojack @ 2.02.2010, 14:40:18 ) *
Tworzysz osobną tabelę dla komentarzy artykułów. Count na id komentarzy dla danego id artykułu i tak jak wyżej orderby na tego counta i limit.

Czyli powtorzyles dokladnie to, co napisal blooregard w ostatniej linijce, tylko że...

Dobrze.

Jeśli tworzysz bloga, którego dziennie odwiedzisz Ty i dwóch znajomych.

Źle.

Jeśli tworzysz strone, która będzie miała do czynienia ze sporym obciążeniem (zarówno wyświetlenia jak i ilość zgromadzonych danych). Wtedy rozwiązanie blooregard'a jest o wiele lepsze.
blooregard
Cytat
@cojack:

Źle.

Tworzysz osobną tabelę dla komentarzy artykułów. Count na id komentarzy dla danego id artykułu i tak jak wyżej orderby na tego counta i limit.

Taa, jasne.

Ja CELOWO pominąłem dywagacje na temat tabeli na komentarze, bo nie o nią tu chodziło, tylko o sposób, w jaki uzyskać 10 artów najczęściej komentowanych, a rozwiązanie z dodatkowym polem w tabeli z artykułami inkrementowanym po każdym dodaniu/dekrementowanym po każdym usunięciu komentarza jest jedynym, które eliminuje konieczność używania COUNT, GROUP BY i innych f-cji. Wiadomo, że musi być tabela, aby było gdzie te komentarze przechowywać i innego sposobu sobie nie wyobrażam, jak tylko utworzyć osobną tabele w tym celu.

A jedna operacja UPDATE przy dodaniu/usunięciu komentarza jest niczym w porównaniu z każdorazowym COUNT + GROUP BY przy wchodzeniu odwiedzających na stronę zawierającą takie zestawienie 10-ciu najczęściej komentowanych.

Generalnie nie będe tu przecież przedstawiał całej struktury bazy danych, bo musiałbym też napisac o tabeli 'users'; przechowującej dane użytkowników, tabeli 'user_to_komentarz' tworzącej relację wskazującą, kto który komentarz dodał, tabeli 'logs' zapisującej kto, z jakiego IP i kiedy ten komentarz dodał, tabeli 'history_details', w której zapisywane byłyby wszystkie zmiany w komentarzach edytowanych przez adminów/modów wraz z ID komentarza, data i czasem dokonanej zmiany, treścią sprzed edycji..... mam wymieniac dalej?
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.