Cześć, postanowiłem napisać plugin na wyświetlanie top x shouterów pod DVZ Shoutbox. Mój problem jest najważniejszą częścią pluginu całego, a mianowicie: Jak powinno wyglądać zapytanie? Przetrzepałem cały plugin dvz i nic :/ Pomóżcie proszę..
Z tego co pamiętam to DVZ w ogóle nie liczy ile shoutów ktoś napisał. Musiałbyś taką funkcję na początek mu dorobić.
Czyli, jak dorobić takąż to opcję?
hmmm moim zdaniem chyba prościej by było zrobić dodatkowa komórkę w mybb_users i dopisać kod na dodawanie +1 przy każdym szocie ale wtedy to co mamy do tej pory w sb pójdzie w zapomnienie
A po co jakieś dodatkowe komórki? Wystarczy poprawne użycie COUNT w zapytaniu i zauważenie, że każdy wpis ma zapisywany uid w bazie. No i oczywiście na końcu coś w stylu ORDER BY co DESC LIMIT 0, 5, gdzie co to skrócenie wcześniejszego COUNT.
a no tak zapomnialem o COUNT
czyli Gibonie <lol> zapytanie mniej wiecej bedzie takie
Kod PHP:
$sql = "SELECT count(*) as totalshouts
FROM ".TABLE_PREFIX."dvz_shoutbox
BY uid ORDER BY totalshouts DESC LIMIT 5";
pisane z glowwy
Zmieniłem to trochę I wygląda to tak:
Kod PHP:
$query = $db->query("SELECT count(*) as totalshouts
FROM ".TABLE_PREFIX."dvz_shoutbox
BY uid ORDER BY totalshouts DESC LIMIT " . $mybb->settings['topshoutlimit']);
while($top_shout = $db->fetch_array($query))
{
I wyskakuje błędzik:
Błąd napisał(a):1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'BY uid ORDER BY totalshouts DESC LIMIT' at line 3
Nie ma takiego czegoś jak BY... Powinno być GROUP BY.
Tak wygląda funkcja:
Kod PHP:
function topshout_show()
{
global $db, $mybb, $page, $topshout, $theme, $templates, $shout;
$query = $db->query("SELECT count(*) as totalshouts
FROM ".TABLE_PREFIX."dvz_shoutbox
GROUP BY uid ORDER BY totalshouts DESC LIMIT " . $mybb->settings['topshoutlimit']);
while($shout = $db->fetch_array($query))
{
$shout['username'] = format_name($shout['username'], $shout['usergroup'], $shout['displaygroup']);
$shout['profilelink'] = build_profile_link($shout['username'], $shout['uid']);
$shout['shouty'] = $shout['totalshouts'];
eval('$top_shout_row .= "'.$templates->get("top_shout_row").'";');
}
eval('$topshout = "'.$templates->get('top_shout').'";');
}
I nie wyświetla mi nicku użytkownika (pokazuje "Gość").
Plugin skończony, tylko takie kosmetyczne rzeczy i leci do DL :>
Twoje zapytanie pobiera tylko ilość wpisów, bez danych użytkownika których chcesz użyć.
Takie powinno zwrócić to, co trzeba (bez zmiennych):
Kod:
SELECT COUNT(*) AS totalshouts, u.uid, u.username, u.usergroup
FROM *dvz_shoutbox s, *users u
WHERE s.uid=u.uid
GROUP BY s.uid ORDER BY totalshouts DESC
Devilshakerz troszke sie mylisz tabela od sb nie ma informacji o uerze trzeba sie do niej podlaczyc
juz mu pomoglem zrobione
:
Zauważ że zaproponowane przez Devilshakerz zapytanie odpowiednio łączy tabele, wyciąga wszystko co potrzebne za jednym zamachem.
zwracam honor niezauwazylem
*users u