|TAG_ID|TAG_POSTS|TAG_TITLE|
| 2 | 44 | PHP
Gdzie tag_id to ID danego tagu, tag_posts to liczba - do ilu wpisów dany tag jest przypisany oraz tag_title to nazwa tagu.
Chciałem zrobić sobie tzw. chmurę tagów, czyli wyświetlanie kilkunastu losowych tagów na stronie głównej. Oczywiście, jeden większą czcionką, drugi mniejszą, jeden pogrubiony, drugi nie - wszystko zależne od tego, do ilu wpisów dany tag jest przypisany.
No i w efekcie stworzyłem sobie taką funkcję:
function generate_tags($count) { if ( $check_cache = sql_cache('check', 'count_best_tag') ) { include($check_cache); $count_best_tag; } else { $sql = "SELECT tag_posts FROM `tags` ORDER BY tag_posts DESC LIMIT 1"; if ( !($result = Query($sql)) ) { } $count_best_tag = $row['tag_posts']; sql_cache('write', 'count_best_tag', $count_best_tag); } $sql = "SELECT * FROM `tags` ORDER BY RAND() LIMIT ".$count.""; if ( !($result = Query($sql)) ) { } $one_hundred = 'margin: 4px; font-weight: bold; color: #494949; font-size: 23px;'; $eighty = 'margin: 4px; font-weight: bold; color: #989898; font-size: 20px;'; $sixty = 'margin: 4px; color: #858585; font-size: 19px;'; $fourty = 'margin: 4px; color: #a7a7a7; font-size: 16px;'; $twenty = 'margin: 4px; color: #c5c5c5; font-size: 13px;'; $tags = '<div id="generate_tags" style="line-height: 150%;">'; { if ( $tag_percent <= 20 ) { $tags .= '<a href="tag-'.$row['tag_title'].'.htm" title="'.$row['tag_posts'].' Tematów"><span style="'.$twenty.'">'.$row['tag_title'].'</span></a> '; } else if ( $tag_percent > 20 && $tag_percent <= 40 ) { $tags .= '<a href="tag-'.$row['tag_title'].'.htm" title="'.$row['tag_posts'].' Tematów"><span style="'.$fourty.'">'.$row['tag_title'].'</span></a> '; } else if ( $tag_percent > 40 && $tag_percent <= 60 ) { $tags .= '<a href="tag-'.$row['tag_title'].'.htm" title="'.$row['tag_posts'].' Tematów"><span style="'.$sixty.'">'.$row['tag_title'].'</span></a> '; } else if ( $tag_percent > 60 && $tag_percent <= 80 ) { $tags .= '<a href="tag-'.$row['tag_title'].'.htm" title="'.$row['tag_posts'].' Tematów"><span style="'.$eighty.'">'.$row['tag_title'].'</span></a> '; } else if ( $tag_percent > 80 && $tag_percent <= 100 ) { $tags .= '<a href="tag-'.$row['tag_title'].'.htm" title="'.$row['tag_posts'].' Tematów"><span style="'.$one_hundred.'">'.$row['tag_title'].'</span></a> '; } } return $tags.'</div>'; }
Tylko, że nie bardzo przypadł mi do gustu ten pomysł z cachowaniem tagu, z największą ilością wystąpień w postach. Obecnie zmienna $count_best_tag zawiera informację z pola tag_posts, tagu który najwięcej razy jest przypisany do postów, potem obliczam na podstawie tej liczby procent wystąpień danego tagu w stosunku do tego najczęściej występującego i odpowiednio go odpicowuję za pomocą CSS.
Co chcę osiągnąć? Chcę wyciągnąć z bazy X tagów (załóżmy 20, to ustawia się ogólnie jako argument funkcji) i w zmiennej $count_best_tag też przetrzymywać największy tag_posts, ALE z wylosowanych 20 wyników, nie ogólnie z całej bazy. No i właśnie nie wiem jak tego dokonać, tutaj prosiłbym o jakieś rady. Wtedy wszystko będę miał w jednym zapytaniu, bez angażowania dodatkowego, drugiego bądź też bez korzystania z cache.