Mein Scripte-Shop:M shop.burglose.de
Meine VMS1.2 Seite: burglose.de
Meine VMS1.1 Seite: losehaufen.de
Doch, sollte schon zusammen funktionieren, nur ist MySQL 4 da etwas "zickig", was solche Bezeichner angeht:
w.werber
evtl. mal das "w." weglassen, kann zwar, wenn's dann funktionieren sollte, zu einem falschen Ergebnis führen, aber manchmal hilft das, könnte dann halt sein, dass man's dann im ORDER BY statement auch weglassen muss.
GROUP BY kann man schlecht rausnehmen, da dann ja der Grundgedanke, also alle Refs EINER id zu zählen, verloren geht, so würde das dann immer nur 1,1,1,1,1,... ausgeben, und man müsste via php die Zahlen je werber id aufaddieren.
ORDER BY ist insofern wichtig, da die Liste ja die ersten 10 absteigend anzeigen soll, anhand der Anzahl refs.
Kill one man, and you are a murderer.
Kill millions of men, and you are a conqueror.
Kill them all, and you are a god. - Jean Rostand, Thoughts of a Biologist (1939)
Sorry das ich mich so lange nichgt gemeldet habe, lag seit MI im Krankenhaus.
hatte ne Harte OP aber jetzt geht es wieder.
So ich habe den Code wie Oben gepostet geändert. jetzt zeigt der "Invalid use of group function" an ich weiß zwar nicht ob das so richtig ist aber wahrscheinlich auf die nichtvorhandenen REFS und Werber zurück zu führen ....
wie lautet der code/mysql befehl noch mal genau? also bei dem die fehler meldung "invalid use of group function" kommt
Kill one man, and you are a murderer.
Kill millions of men, and you are a conqueror.
Kill them all, and you are a god. - Jean Rostand, Thoughts of a Biologist (1939)
~Zusammengeführt, by Sebmaster~PHP-Code:
<?
$rang = 1;
$platz4 = db_query('SELECT COUNT(w.uid) as anz,w.werber,u.nickname FROM '.$db_prefix.'_werberdaten AS w LEFT JOIN vms_userdaten AS u ON u.uid=w.werber WHERE w.werber!=0 GROUP BY w.werber ORDER BY COUNT(w.uid) DESC LIMIT 10') or die(mysql_error());
while($nickw = mysql_fetch_array($platz4)){
$i++;
$row = ($i % 2 == 0) ? 0 : 1;
echo '
<tr class="tr_row'.$row.'">
<td align="center">'. $rang++ .'</td>
<td align="center"><a href="?content=/nickpage&nick='.$nickw['nickname'].'">'.$nickw["nickname"].'</a></td>
<td align="center">'.$nickw['anz'].'</td>
</tr>
';
}
echo '
</table>
';
foot();?>
<?head("Copyright");?>
<!-- Diese Addon wurde vom User adi , klammid : 248998 zusammen gebaut und alle rechte unterliegen ihm .
Sollten sie dieses Copyright ohne Erlaubnis entfernen , erlischt ihre Lizenz und zieht rechtliche Schritte mit sich .
Wenn sie das Copyright entfernen wollen kontacktieren sie mich im forum per pn .
-->
<div align="center"><font size="1">Top10 Addon © by <a href="http://www.vms-tutorial.de" target="_blank">adi</a></font></div>
<?foot();?>
<?
//Auslesen des traffics der vor xx sec eingelesen wurde
file_put_contents('dynamic_cache/top10_adi.txt', ob_get_flush() );
}else{
echo file_get_contents('dynamic_cache/top10_adi.txt');
}
?>
PHP-Code:
<?
$rang = 1;
$platz4 = db_query('SELECT COUNT(w.uid) as anz,w.werber,u.nickname FROM '.$db_prefix.'_werberdaten AS w LEFT JOIN vms_userdaten AS u ON u.uid=w.werber WHERE w.werber!=0 GROUP BY w.werber ORDER BY COUNT(w.uid) DESC LIMIT 10') or die(mysql_error());
while($nickw = mysql_fetch_array($platz4)){
$i++;
$row = ($i % 2 == 0) ? 0 : 1;
echo '
<tr class="tr_row'.$row.'">
<td align="center">'. $rang++ .'</td>
<td align="center"><a href="?content=/nickpage&nick='.$nickw['nickname'].'">'.$nickw["nickname"].'</a></td>
<td align="center">'.$nickw['anz'].'</td>
</tr>
';
}
echo '
</table>
';
foot();?>
Dieser MySQL Befehl:
Wird auf MySQL v5 korrekt ausgeführt ohne Fehlermeldung, daher wird es wohl an eurer veralteten MySQL Version liegen.Code:SELECT COUNT( w.uid ) AS anz, w.werber, u.nickname FROM vms_werberdaten AS w LEFT JOIN vms_userdaten AS u ON u.uid = w.werber WHERE w.werber !=0 GROUP BY w.werber ORDER BY COUNT( w.uid ) DESC LIMIT 10
Da ich keine alten Versionen benutze, kann ich das jetzt nicht testen, aber vielleicht gehts so?
MySQL 4 hat ja teilweise Probleme mit Tabellen Referenzen Alias(sen )PHP-Code:
$platz4 = db_query('SELECT COUNT(w.uid) as anz,w.werber,u.nickname FROM '.$db_prefix.'_werberdaten AS w LEFT JOIN vms_userdaten AS u ON u.uid=w.werber WHERE w.werber!=0 GROUP BY werber ORDER BY COUNT(w.uid) DESC LIMIT 10') or die(mysql_error());
Kill one man, and you are a murderer.
Kill millions of men, and you are a conqueror.
Kill them all, and you are a god. - Jean Rostand, Thoughts of a Biologist (1939)
hmm leider immernoch der selbe fehler
OK wie kann ich meine PHP version auf 5 uppen ???
Ich wusste ja schon vorher das ich ein Übersetzungsproblem habe da ich php 4.5 fahre... Wusste auch genau das es nicht schwer zu lösen ist, aber habe nach 3 stunden php forenwälzen nur eine semi elegante version gehabt, die den fehler nur an dieser stelle per if/else behebt...
Wenn das mal nicht elegant von Dir gelöst ist weis ich auch nicht... genau 2 Sekunden arbeit und nun frisst mein script alle file_put_content befehle obwohl es php4.5 ist....
Flawless Victory Danke für diesen Fehlerteufelvernichter
Jetzt brauch ich nurnoch was elegantes um die division durch null zu vermeiden, ich meine, kann ja nicht die lösung sein auf die ersten 10 Betteluser zu warten bevor das weggeht in der top 10. Die Lösung ist auch relativ simpel ich kriegs nur nocht gebacken
Es müsste ja einfach erst dann teilen, wenn der Wert nicht null ist-
Also sowas in der Art:
if($bettelaufrufe == 0){ $Durchschnitt=0; }
else { $Durchschnitt=$bettelaufrufe / $bettelverdienst; }
Natürlich nur vom Denkansatz her... ich bin bissel plöd und kriege das nicht
auf diese Stelle so angewendet....
Wär natürlich noch geiler wenn man das nach Sebmasters Art in der funktions lib ändern könnte, denn dieses addon ist nicht das einzigste das unsauber auf dieser division geproggt ist, kommt oft genug irgendwo vor, wo halt die meisten Zähler am Anfang mit 0 anfangen, gibt den Fehler irre oft bei vms...
Er müsste ja einfach nur generell bei Wert 0 eine Null als Ergebnis einsetzen, und erst wenn der Wert nicht 0 ist müsste er die division
ausführen...
Dazu müsstest du entweder dein PHP selber kompilieren, oder den PHP Entwickerln sagen, dass man den / Operator überschreiben darf
Da beides wohl eher nicht in Frage kommt, bleibt an sich nur die Behandlung "an Ort und Stelle":
vorher:
nachher:PHP-Code:
$wert = $datum1 / $datum2;
Statt 0 kann manchmal auch 100 (Prozent bspw.) sinnvoll sein.PHP-Code:
$wert = ($datum2!=0) ? ($datum1 / $datum2) : 0;
Da das kein Kompiler und Interpterer nur schwer selber entscheiden koennen, bleibt an sich nur das manuelle Einabuen.
Ist an sich nur eine verkuerzte Schreibweise für if else
Mit einem guten Editor/IDE lässt sich sowas aber schnell in allen Dateien ändern.
Dabei muss aber auch berücksichtigt werden, dass an manchen Stellen, sofern durch 0 geteilt wird, tatsächlich ein Fehler auftreten muss, den man nicht "umgehen" sollte!
Kill one man, and you are a murderer.
Kill millions of men, and you are a conqueror.
Kill them all, and you are a god. - Jean Rostand, Thoughts of a Biologist (1939)