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ę..
Zapytanie na wyciągnięcie ilości wpisów użytkownika na shoutboxie (DVZ Shoutbox)
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ć.
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
Destroy666
- MyBBaktywny
- 421 8 307 3
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
pisane z glowwy
czyli Gibonie <lol> zapytanie mniej wiecej bedzie takie
$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:
I wyskakuje błędzik:
$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
Destroy666
- MyBBaktywny
- 421 8 307 3
Tak wygląda funkcja:
I nie wyświetla mi nicku użytkownika (pokazuje "Gość").
Plugin skończony, tylko takie kosmetyczne rzeczy i leci do DL :>
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 :>
Devilshakerz
- MyBBaktywny
- 308 42 536 16
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):
Takie powinno zwrócić to, co trzeba (bez zmiennych):
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
juz mu pomoglem zrobione
Łukasz Tkacz
- Mentor MyBB
- 3 025 173 2 137 14
@Supryk:
Zauważ że zaproponowane przez Devilshakerz zapytanie odpowiednio łączy tabele, wyciąga wszystko co potrzebne za jednym zamachem.
Zauważ że zaproponowane przez Devilshakerz zapytanie odpowiednio łączy tabele, wyciąga wszystko co potrzebne za jednym zamachem.
Użytkownicy przeglądający ten wątek:
2 gości