Dołącz do zespołu ekspertów! Backend lub Frontend Developer?

Sprawdź najnowsze oferty pracy naszego partnera - 8lines.io!

Zapytanie na wyciągnięcie ilości wpisów użytkownika na shoutboxie (DVZ Shoutbox)

PHP/MYSQL  Założony przez  GiboneKPL.

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

$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:
$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:
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):
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
@Supryk:
Zauważ że zaproponowane przez Devilshakerz zapytanie odpowiednio łączy tabele, wyciąga wszystko co potrzebne za jednym zamachem.
zwracam honor niezauwazylem

*users u



Użytkownicy przeglądający ten wątek:

3 gości