Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MYSQL]Wybieranie danych z tablicy i liczenie ile razy się powtórzyły
Forum PHP.pl > Forum > Przedszkole
Stypula
Więc mam w bazie danych kolumnę "tagi" w której mam dane w formacie "tag1, tag2, tag3, (...)" i chcę żeby mi się wyświetlało 5 słów które się najczęściej powtarzają (ze wszystkich rekordów pobranych z pola "tagi").
Jeśli mnie nadal nie rozumiecie to podam przykład:
Mam pewną tabelę w której mam pola id i tagi. Rekordy wyglądają tak:
  1. <?php
  2. 1 | rock, punk, the offspring, americana
  3. 2 | rock, coldplay, death and all his friends
  4. 3 | a perfect circle, the noose
  5. 4 | green day, rock, american idiot
  6. ?>

Pobieram tagi za pomocą:
  1. mysql_query("select tagi as tagi from tabela")
następnie robię z tego tablicę za pomocą explode (usuwam przecinki):
  1. <?php
  2. $tagi=explode(", ", $tagi);
  3. ?>
. I teraz z powstałej tablicy "$tagi" chcę wyciągnąć wszystkie rekordy i policzyć ile razy się który powtarza a następnie wyświetlić pięć które użyte zostały najczęściej i wyświetlić je. Kolejność nie ma znaczenia haha.gif.
Proszę o pomoc
melkorm
Napsiałem sobie to i nawet nei jest trudne ;p Ale napsize Tobie jak to powinno wyglądać a napewno sobie poradzisz ;]

1. Pobierając z bazy tagi zapisujesz je do 1 stringu (każda nazwa zespołu po przecinku)
2. Tworzysz tablice poprzez explode na ten string
3. robisz na niej array_unique
4. następnie funkcją foreach lecisz po tej tablicy i szukasz ilości wystąpień wartości w stringu i zapisujesz do tablicy nazwa zespołu jako klucz ilość wystąpień jako wartość przyda ci się tutaj : substr_count
5. na koniec arsort na tablicy i pierwsze 5 wierszy to jest to czego szukasz ;p

Mam nadzieje że nei masz za złe że nei dałem gotowego kodu ;p Ale dzieki temu się czegoś nauczysz ... może i jest jakieś łatwiejsze rozwiązanie - to z chęcią się dowiem jakby wygladało snitch.gif
erix
Cytat
4. następnie funkcją foreach lecisz po tej tablicy i szukasz ilości wystąpień wartości w stringu i zapisujesz do tablicy nazwa zespołu jako klucz ilość wystąpień jako wartość przyda ci się tutaj : substr_count

Trochę strzelasz do muchy z armaty, bo jest taka fajna funkcja array_count_values" title="Zobacz w manualu PHP" target="_manual. winksmiley.jpg
melkorm
Cytat
Trochę strzelasz do muchy z armaty, bo jest taka fajna funkcja array_count_values.


przejrzałem z 3 razy liste funkcji do tablic ... masakra D: brzydal.gif

aż mnie dziwiło że takeigo czegoś nie ma D:

//zapomniałem jeszcze o jednym - pamietaj by oczyścić ze spacji każdą wartość bo inaczej rozpozna "rock" i np. "(spacja)rock" tongue.gif
Stypula
Ok. Mam coś takiego:
  1. <?php
  2. $tag='';
  3. $tagi=mysql_query("select * from utwory");
  4.        if(mysql_num_rows($tagi)>0){
  5.    while($r = mysql_fetch_assoc($tagi)) {  
  6. $tag=$r['tagi'].", ".$tag;
  7.    }
  8.                $tagi=explode(", ", $tag);
  9. $ile=array_count_values($tagi);
  10. arsort($ile);
  11. foreach ($ile as $key => $val) {
  12.    echo "$key\n";
  13. }
  14. ?>

Ale jak wypisać tylko pierwszych pięć wierszów z tego $ile? Bo foreach wypisuje wszystkie ;\ A moje
  1. <?php
  2. foreach ($ile as $key => $val<5){
  3. ?>
wywala błąd ; D
erix
foreach" title="Zobacz w manualu PHP" target="_manual tongue.gif

Podpowiedź: zrób przed pętlą zmienną licznika i sprawdzaj go przy każdym skoku pętli. Jeśli ma wartość, o którą Ci chodzi, przerwij pętlę.

No prościej się już nie da, teraz manual w łapki. winksmiley.jpg
Stypula
Ok. Rozwiązałem to za pomocą:
  1. <?php
  2. $i=0;
  3. foreach ($ile as $key => $val) {
  4. $i++;
  5.    echo "<a href=\"tag.php?tag=".$key."\" class=\"link\">".$key"</a>";
  6.    if($i==5){
  7.    break;}
  8. }
  9. ?>

Chwała Wam za to że nie podajecie kodu tylko zmuszacie do samodzielnego myślenia ; D.
Btw. chyba sobie zrobię użytkownika ^^
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.