Hallo, Gast! (Registrieren)

Letzte Ankündigung: MyBB 1.8.38 veröffentlicht (30.04.24)


Benutzer, die gerade dieses Thema anschauen: 2 Gast/Gäste
Bewertungen zusammenzählen (ezTrader)
#1
Hallo,
ich brauche Hilfe beim Zusammenzählen der Bewertungen des Plugins (ezTrader) : https://www.mybb.de/erweiterungen/16x/pl...ng-system/

Dort sind alle Bewertungen in der Datenbank-Tabelle gespeichert und beinhalten eine zusätzliche Angabe, ob die Bewertung Positiv, Neutral oder Negativ war.

Nun zu meiner Frage. Wie zähle ich alle positiven Bewertungen in dieser Tabelle zusammen und gebe dann eine Angabe aus, wie z.b. +7 oder -1 oder 0 (für neutral)

Dabei sollten die Bewertungen so gezählt werden: wenn 3 positiv sind, 1 negativ, dann ist es schließlich +2.
Zitieren
#2
Ich verstehe nicht ganz, wo Dein tatsächliches Problem ist....
viele Grüße
Jockl
übersetzte und eigene Plugins
Zitieren
#3
Mein Problem ist, wenn ich das zusammenzähle, dann kann ich das nur von einer von mir definierten UID machen. Ich möchte aber die Bewertungen absteigend von dem User mit der höchsten auflisten.
Zitieren
#4
Kannst Du mal den Code posten, den Du bisher für die Ermittlung der Daten erstellt hast?
viele Grüße
Jockl
übersetzte und eigene Plugins
Zitieren
#5
Hab den von der "eztrader.php" herauskopiert. Wenn ich den im Template einfüge, geht er und zeigt halt an.

Positive Bewertungen: 8 - Negative Bewertungen: 0 - Neutrale Bewertungen 1


PHP-Code:
<?php
define
("IN_MYBB"1);
define('THIS_SCRIPT''eztrader.php');

require_once 
"./global.php";
require_once 
MYBB_ROOT."inc/eztrader.lib.php";
require_once 
MYBB_ROOT."inc/class_parser.php";
$parser = new postParser;
$parser_options = array(
            
"allow_html" => 0,
            
"allow_mycode" => 1,
            
"allow_smilies" => 1,
            
"allow_imgcode" => 1,
            
"filter_badwords" => 1
        
);

$lang->load("eztrader");

add_breadcrumb($lang->eztrader_text_title"eztrader.php");

// Load Trader Settings
LoadTraderSettings();
// Load Trader Permissions
TraderLoadPermissions();

    
// Trader Actions
    
$subActions = array(
    
        
'report' => 'ezTrader_Report',
        
'report2' => 'ezTrader_Report2',
        
'submit' => 'ezTrader_Submit',
        
'detail' => 'ezTrader_ViewDetail',
        
'delete' => 'ezTrader_Delete',
        
'delete2' => 'ezTrader_Delete2',
        
'submit2' => 'ezTrader_Submit2',
    );
    
    @
$sa $mybb->input['sa'];
    if (!empty(
$subActions[$sa]))
        
$subActions[$sa]();
    else
        
ezTrader_mainview();

function 
ezTrader_mainview()
{
    global 
$mybb;
    
    global 
$context$lang$db$scripturl$traderSettings;

    @
$memid 487;

    if (empty(
$memid))
        
ezTrader_fatal_error2($lang->eztrader_nomemberselectedfalse);

    
$request $db->query("
    SELECT 
        username FROM " 
TABLE_PREFIX."users
    WHERE uid = 
$memid LIMIT 10");
    
$row $db->fetch_array($request);

    
$mcount $db->num_rows($request);

    if (
$mcount != 1)
        
ezTrader_fatal_error2($lang->eztrader_nomemberselectedfalse);

    
$context['traderid'] = $memid;
    
$context['tradername'] = $row['username'];
    
$context['page_title'] = $lang->eztrader_feedbacktitle ' - ' $row['username'];

    
$request $db->query("
    SELECT 
        feedbackid 
    FROM " 
TABLE_PREFIX."trader_feedback 
    WHERE approved = 1 AND ID_MEMBER =" 
$context['traderid']);
    
$context['tradecount'] = $db->num_rows($request);
    
    
    
$result $db->query("
    SELECT 
        COUNT(*) AS total,salevalue 
    FROM " 
TABLE_PREFIX."trader_feedback 
    WHERE approved = 1 AND ID_MEMBER = " 
$context['traderid'] . " GROUP BY salevalue" );
    
$context['neturalcount'] = 0;
    
$context['pcount'] = 0;
    
$context['ncount'] = 0;
    while(
$row $db->fetch_array($result))
    {
        if (
$row['salevalue'] == 0)
        {
            
$context['pcount'] = $row['total'];
        }
        else if (
$row['salevalue'] == 2)
        {
            
$context['ncount'] = $row['total'];
        }    
        else if (
$row['salevalue'] == 1)
        {
            
$context['neturalcount'] = $row['total'];
        }
        
    }
    
$db->free_result($result);
    
    
$context['tradecount_nonetural'] = ($context['pcount'] +  $context['ncount']);
    
    
// Get the view type
    
@$view = (int) $_GET['view'];
    if (empty(
$view))
            
$view 0;
    
    
            
$queryextra '';
            switch(
$view)
            {
                case 
0:
                
$queryextra '';
                break;
                case 
1:
                
$queryextra ' AND f.saletype = 1';
            
                break;
                case 
2:
                
$queryextra ' AND f.saletype = 0';
                break;
                case 
3:
                
$queryextra ' AND f.saletype = 2';

                break;
                default:
                
ezTrader_fatal_error2($lang->eztrader_invalidviewfalse);
                break;
            }

            
    
$context['start'] = (int) $_REQUEST['start'];
    
    
    
$dbresult $db->query("
    SELECT 
        COUNT(*) AS total 
    FROM (" 
TABLE_PREFIX."trader_feedback AS f)
    LEFT JOIN " 
TABLE_PREFIX."users AS m ON (f.FeedBackMEMBER_ID = m.uid) 
    WHERE f.ID_MEMBER = " 
$context['traderid'] . "  AND f.approved = 1 $queryextra ");
    
$row $db->fetch_array($dbresult);
    
$total $row['total'];
    
$db->free_result($dbresult);
    
    
$selectClassifiedsSQL '';
    
$leftJoinClassifieds '';
    
        
$perpage $traderSettings['trader_feedbackperpage'];
        
$page intval($mybb->input['page']);
                
        if(
intval($mybb->input['page']) > 0)
        {
            
$start = ($page-1) *$perpage;
        }
        else
        {
            
$start 0;
            
$page 1;
        }
            
    
$dbresult $db->query("
    SELECT 
            f.saletype, f.feedbackid, f.FeedBackMEMBER_ID,  f.topicurl, 
            f.comment_short, f.salevalue, f.saledate, m.username 
$selectClassifiedsSQL
    FROM (" 
TABLE_PREFIX."trader_feedback AS f) 
    LEFT JOIN " 
TABLE_PREFIX."users AS m ON (f.FeedBackMEMBER_ID = m.uid) 
    
$leftJoinClassifieds
    WHERE f.ID_MEMBER = " 
$context['traderid'] . "  AND f.approved = 1 $queryextra ORDER BY f.feedbackid DESC LIMIT $start,$perpage");
    
$context['trader_feedback'] = array();
    while (
$row $db->fetch_array($dbresult))
    {
        
$context['trader_feedback'][] = $row;
    }
    
$db->free_result($dbresult);
    

    
$pagingList multipage($total$perpage$page"eztrader.php?id='" $context['traderid'] . "view=$view");

    
// Set the page title
    
    
    
$neturalcount $context['neturalcount'];
    
$pcount $context['pcount'];
    
$ncount $context['ncount'];

    if (
$context['tradecount'] != 0)
        
$feedpos =  round(($pcount $context['tradecount_nonetural']) * 1002);
    else
        
$feedpos 0;
        
        
    if (
$traderSettings['trader_use_pos_neg'])
        
$context['tradecount'] = ($context['pcount'] -$context['ncount']);


echo 
'
                    
                <tr><td>' 
$lang->eztrader_positivefeedback  $pcount '&nbsp;<img src="' $mybb->settings['bburl'] . '/images/smilies/smile.gif" alt="positive" /></td></tr>
                <tr><td>' 
$lang->eztrader_neutralfeedback  .  $neturalcount '&nbsp;<img src="' $mybb->settings['bburl'] . '/images/smilies/undecided.gif" alt="netural" /></td></tr>
                <tr><td>' 
$lang->eztrader_negativefeedback   .  $ncount '&nbsp;<img src="' $mybb->settings['bburl'] . '/images/smilies/angry.gif" alt="negative" /></td></tr>
                
                
            '
;

            echo 
'    


                    <td align="left" colspan="6">
                    ' 
$pagingList '
                    </td>
                
</table>
        </td>
    </tr>
</table>
</div>'
;
}





function 
eztrader_header()
{
    global 
$headerinclude$context$header;

    echo 
parse_page('<html>
<head>
<title>' 
$context['page_title'] .'</title>
$headerinclude '
</head>
<body>
$header);



}

function 
eztrader_footer()
{
    global 
$footer;
    
    echo 
$footer;
    
    echo 
'</body>
</html>'
;
}


function 
ezTrader_Delete()
{
    global 
$context$db$lang$parser$parser_options;

    
// Check if they are allowed to delete feedback
    
ezTrader_isAllowedTo('deletefeed');

    @
$feedid = (int) $_REQUEST['feedid'];
    if (empty(
$feedid))
        
ezTrader_fatal_error2($lang->eztrader_errnofeedselectedfalse);

    
$context['feedid'] = $feedid;

    
$context['page_title'] = $lang->eztrader_title ' - ' $lang->eztrader_deletefeedback;

    
$result "SELECT f.saletype, f.feedbackid, f.ID_MEMBER, f.FeedBackMEMBER_ID, 
    f.comment_short,  f.topicurl, f.comment_long, f.salevalue, f.saledate, m.username 
    FROM " 
TABLE_PREFIX."trader_feedback AS f," TABLE_PREFIX."users AS m 
    WHERE f.feedbackid = " 
$context['feedid'] . " AND f.FeedBackMEMBER_ID = m.uid";

    
$dbresult $db->query($result);
    
$row $db->fetch_array($dbresult);
    
$db->free_result($dbresult);
    
    
$context['trader_feedback'] = $row;
    
eztrader_header();
echo 
'
'
;

    }
    

?>
Zitieren
#6
Die Gesamtbewertung solltest Du eigentlich mit diesen Variablen berechnen können
PHP-Code:
$neturalcount $context['neturalcount'];
$pcount $context['pcount'];
$ncount $context['ncount']; 
Wenn Du die Daten nicht nur für eine bestimmte User-ID ermitteln willst, darfst Du den MySQL-Query nicht nach der ID (traderid) einschränken.
Ggf. kannst Du bei der MySQL-Abfrage auch schon mit Hilfe von "WHERE" die Berechnung durchführen lassen und dann nach dem Ergebnis sortieren. Ob dieser Weg allerdings nicht zu Lasten der Ladezeit der Seite geht, das kann ich nicht abschätzen.
viele Grüße
Jockl
übersetzte und eigene Plugins
Zitieren
#7
Also,
ich habe es nun so versucht, wie du es mir gesagt hast.

Folgender Code zählt alle Positiven Bewertungen, die man erhalten hat zusammen und gibt dann eine Zahl aus. (Negative oder Neutrale werden nicht dazugezählt, oder abgezogen!)

Problem: Der Code zeigt wiederum nur die Bewertung des Users an, den ich definiere.
Wenn ich WHERE `ID_MEMBER` nicht festlege und es dann aus der Abfrage herausnehme, bekomme ich einen SQL Fehler.

Bei Hilfe wäre ich sehr dankbar!


Code-Ausschnitt:

PHP-Code:
<?php 


    
global $db$mybb;
    {        
    
      
$query $db->query("
      SELECT COUNT(*) AS `salevalue` 
FROM  `mybb_trader_feedback` 
WHERE  `ID_MEMBER` = 1
AND  `saletype` =0
AND  `salevalue` =0 
LIMIT 0,10
"
);
            echo 
'';

...
...
... 
Zitieren
#8
Nur die WHERE-Zeile zu entfernen, wenn danach noch andere Bedingungen (AND) folgen, das führt natürlich zu einem Fehler....
Du müsstest die Abfrage schon noch ein wenig mehr abändern und wirst, wenn Du die Daten von allen Usern abfragen willst, danach mit einer while-Schleife arbeiten müssen, um die Werte pro User zu addieren.
viele Grüße
Jockl
übersetzte und eigene Plugins
Zitieren
#9
// EDIT: Habe es geschafft. GROUP BY und DESC hat geholfen.
Zitieren