php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger

PHP Einsteiger PHP Problemlösungen für Spracheinsteiger
Archive: 2004, 2004/2, 2005, 2005/2, 2006, 2007, 2008, 2009, 2010,

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 23.12.2011, 20:15  
Neuer Benutzer
 
Registriert seit: 07.11.2009
Beiträge: 10
PHP-Kenntnisse:
Fortgeschritten
jans befindet sich auf einem aufstrebenden Ast
Standard sort() mit mehreren Ints für eine Rangliste

Hey Community,

ich habe einen CS:S-Server und dort ein, eigens geschriebenes "Stamm"-System.

Stamm ist ein Plugin, das für jeden Spieler die Runden zählt. Desto mehr Runden man hat, ist man natürlich weiter oben auf der Rangliste. Ab 2000 Punkten hat man alle Skins auf dem Server. Natürlich ist es für die Spieler ein Ansporn immer weiter höher auf die Liste zu kommen.

Dieses Stamm-System sendet am Ende jeder Runde ein Signal an den Webserver und die Online-Datenbank (es gibt 2: einmal Online, einmal auf dem Server) zählt eine Runde dazu, klar.
Soweit funktioniert alles einwandfrei. Die Tabelle schaut wie folgt aus:

Code:
steamid       | points   |  name
--------------------------------------
STEAM_XXXX      XXXXX     XXXXXXX
Nun soll alles in eine Liste, mithilfe von Ajax gepackt werden. Die Liste funktioniert, genauso wie das Anzeigen und formatieren der Daten in einen HTML-Code über Javascript.
Doch mein Problem ist die ajax.php

PHP-Code:
$sql = mysql_query("SELECT COUNT(*) AS c FROM `user`");
$len = 0;

while($r = mysql_fetch_assoc($sql)) {
    $len = $r['c'];
}

?>var GLOBAL_STAMM = [<?
$str 
'';

for(
$i $offset$i $len$i++) {
    
$sql_2 mysql_query("SELECT * FROM `user` ORDER BY `points` DESC LIMIT $i,1");
    while(
$r mysql_fetch_assoc($sql_2)) {
        
$inf $r;
    }
    
$str.= '["'.$inf["points"].'", "'.$inf["steamid"].'", "'.$inf["name"].'"],';
}

echo 
substr($str0strlen($str)-1);
?>];<?
Diese liefert zwar ein richtiges Ergebnis, doch dies sieht dann (nachdem Ajax und so es formatiert hat) in etwa so aus:
Code:
dd5f	747
z3r0x	6093
Warum ist dd5f (komischer Name ) vor zerox, obwohl er mehr Punkte hat? Ich möchte das dies richtig formatiert wird.

Laange Rede, kurzer Sinn: Wie mach ich das?
jans ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 23.12.2011, 21:15  
Erfahrener Benutzer
 
Benutzerbild von drsoong
 
Registriert seit: 05.08.2008
Beiträge: 1.127
drsoong wird schon bald berühmt werden
Standard

Das ist schon ein verrückter Code!

Der Einsatz von while-Schleifen bei einzeiligen Ergebnissen ist verwirrend bis sinnfrei.

Das
Code:
LIMIT $i,1"
liefert ja auch nur eine Zeile zurück. Ein ORDER ...DESC erübrigt sich da. Meiner Ansicht nach reicht die zweite Abfrage sql_2 ohne die LIMIT Angabe. Das Ergebnis kannst Du dann sinnvoll mit while durchlaufen.
__________________
Es ist schon alles gesagt. Nur noch nicht von allen.
drsoong ist offline   Mit Zitat antworten
Alt 24.12.2011, 11:59  
Neuer Benutzer
 
Registriert seit: 07.11.2009
Beiträge: 10
PHP-Kenntnisse:
Fortgeschritten
jans befindet sich auf einem aufstrebenden Ast
Standard

Jo, hab soviel geändert, da kam sowas raus
Hier der geänderte Code:
PHP-Code:
$sql mysql_query("SELECT COUNT(*) AS c FROM `user`");
$len mysql_fetch_assoc($sql);
$len $len['c']; 
PHP-Code:
for($i $offset$i $len$i++) {
    
$sql_2 mysql_query("SELECT * FROM `user` LIMIT $i,1");
    while(
$r mysql_fetch_assoc($sql_2)) {
        
$inf $r;
    }
    
$nam str_replace('"'''str_replace("'"''$inf["name"]));
    
$pts $inf["points"];
    
$stm $inf["steamid"];
    
$str.= '["'.$pts.'", "'.$stm.'", "'.$nam.'"],';

Aber meine wirkliche Frage wurde noch nicht beantwortet :S
jans ist offline   Mit Zitat antworten
Alt 24.12.2011, 12:09  
Erfahrener Benutzer
 
Benutzerbild von tr0y
 
Registriert seit: 26.07.2010
Beiträge: 4.874
PHP-Kenntnisse:
Fortgeschritten
tr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblick
tr0y eine Nachricht über MSN schicken
Standard

PHP-Code:
// check if data is available
$result_count mysql_query("SELECT COUNT(*) AS count FROM `user`");
$count = (int)mysql_fetch_object($result_count)->count;

if ( 
$count ) {
   
$html = array();

   
$result_data mysql_query("SELECT name, points, steamid FROM `user` ORDER BY steamid DESC");
   while ( 
$data mysql_fetch_object($result_data) ) {
      
$found = array('"'"'"); $replace = array('','');
      
$points str_replace($found$replace$data->points);
      
$name $data->name;
      
$steamid $data->steamid;
      
$html[] = '['.join(',', array('"'.$points.'"''"'.$steamid.'"''"'.$name.'"')).']';
   }

   
$html join(','$html);
}

echo 
$html
Edit: Irgendwie sieht das nach JSON aus was du daraus basteln willst, korrekt ?
__________________
Lasse mir ohne Anwendung von Gewalt Dinge schenken, Amazon weiß darüber bald mehr.

Geändert von tr0y (24.12.2011 um 12:49 Uhr). Grund: Er hat doch nicht copy'n'pasted, welch ein glück ;)
tr0y ist offline   Mit Zitat antworten
Alt 24.12.2011, 12:19  
Neuer Benutzer
 
Registriert seit: 07.11.2009
Beiträge: 10
PHP-Kenntnisse:
Fortgeschritten
jans befindet sich auf einem aufstrebenden Ast
Standard

Mal davon abgesehen, das der Code nicht ganz geht:
(So richtig
PHP-Code:
$result_count mysql_query("SELECT COUNT(*) AS count FROM `user`");
$count = (int)mysql_fetch_object($result_count)->count
Funktioniert leider die Ordnung auch nicht:
So sieht es aus: 0,0,747,5019,1688,0,0,0,4756
jans ist offline   Mit Zitat antworten
Alt 24.12.2011, 12:50  
Erfahrener Benutzer
 
Benutzerbild von tr0y
 
Registriert seit: 26.07.2010
Beiträge: 4.874
PHP-Kenntnisse:
Fortgeschritten
tr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblick
tr0y eine Nachricht über MSN schicken
Standard

Zitat:
Zitat von jans Beitrag anzeigen
Mal davon abgesehen, das der Code nicht ganz geht:
(So richtig
PHP-Code:
$result_count mysql_query("SELECT COUNT(*) AS count FROM `user`");
$count = (int)mysql_fetch_object($result_count)->count
Funktioniert leider die Ordnung auch nicht:
So sieht es aus: 0,0,747,5019,1688,0,0,0,4756
PHP-Code:
// check if data is available
$result_count mysql_query("SELECT COUNT(*) AS count FROM `user`");
$count = (int)mysql_fetch_object($result_count)->count;

if ( 
$count ) {
   
$html = array();

   
$result_data mysql_query("SELECT name, points, steamid FROM `user` ORDER BY points DESC");
   while ( 
$data mysql_fetch_object($result_data) ) {
      
$found = array('"'"'"); $replace = array('','');
      
$points str_replace($found$replace$data->points);
      
$name $data->name;
      
$steamid $data->steamid;
      
$html[] = '['.join(',', array('"'.$points.'"''"'.$steamid.'"''"'.$name.'"')).']';
   }

   
$html join(','$html);
}

echo 
$html
Umsetzen is was anderes. Na heut is ja Weihnachten. Dir fehlen dann wohl SQL-Grundlagen.
__________________
Lasse mir ohne Anwendung von Gewalt Dinge schenken, Amazon weiß darüber bald mehr.
tr0y ist offline   Mit Zitat antworten
Alt 24.12.2011, 12:57  
Neuer Benutzer
 
Registriert seit: 07.11.2009
Beiträge: 10
PHP-Kenntnisse:
Fortgeschritten
jans befindet sich auf einem aufstrebenden Ast
Standard

Mir fehlen keine SQL-Grundlagen, aber es geht nicht.

Guck es dir live an:
http://88.153.77.148:8080/stamm/
jans ist offline   Mit Zitat antworten
Alt 24.12.2011, 13:05  
Erfahrener Benutzer
 
Benutzerbild von tr0y
 
Registriert seit: 26.07.2010
Beiträge: 4.874
PHP-Kenntnisse:
Fortgeschritten
tr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblick
tr0y eine Nachricht über MSN schicken
Standard

*aufs ORDER BY points zeig in der letzen von ihm erstellen Codebox*
__________________
Lasse mir ohne Anwendung von Gewalt Dinge schenken, Amazon weiß darüber bald mehr.
tr0y ist offline   Mit Zitat antworten
Alt 24.12.2011, 13:11  
Neuer Benutzer
 
Registriert seit: 07.11.2009
Beiträge: 10
PHP-Kenntnisse:
Fortgeschritten
jans befindet sich auf einem aufstrebenden Ast
Standard

So, ich habe deinen Code genommen (PS: Das ORDER BY points war auch schon vorher eig drin)

PHP-Code:
// check if data is available
$result_count mysql_query("SELECT COUNT(*) AS count FROM `user`");
$count = (int)mysql_fetch_object($result_count)->count;

if ( 
$count ) {
   
$html = array();

   
$result_data mysql_query("SELECT name, points, steamid FROM `user` ORDER BY `points` DESC");
   while ( 
$data mysql_fetch_object($result_data) ) {
      
$found = array('"'"'"); $replace = array('','');
      
$points str_replace($found$replace$data->points);
      
$name $data->name;
      
$steamid $data->steamid;
      
$html[] = '['.join(',', array('"'.$points.'"''"'.$steamid.'"''"'.$name.'"')).']';
   }

   
$html join(','$html);

Ergebnis: Schaue selbst (http://88.153.77.148:8080/stamm/)
jans ist offline   Mit Zitat antworten
Alt 24.12.2011, 13:15  
meikel
Gast
 
Beiträge: n/a
Standard

Zitat:
Zitat von jans Beitrag anzeigen
Mir fehlen keine SQL-Grundlagen, aber es geht nicht.
Das beißt sich.

1. welchen Sinn hat das count() SELECT (außer daß der SQL Server beschäftigt wird)?
Wenn die nachfolgende Abfrage ein Ergebnis hat, ist COUNT(*) > 0.
2. wie sieht das CREATE TABLE der Tabelle user aus?
Die von Dir angeführte Sortierung:
Code:
dd5f    747 
z3r0x    6093
läßt die Vermutung zu, daß die Spalte Points nicht numerisch sondern nach varchar sortiert wird.
Daß das
Code:
 LIMIT $i,1
Unfug ist, wurde schon durchgekaut.
  Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Rangliste unter Berücksichtigung von Direktbegegnung Domendo PHP Einsteiger 8 03.06.2011 10:20
[Erledigt] MySQL SORT BY mit mehreren SORTS (Nach Priorität geordnet) DJ_RhoxxZ Datenbanken 3 17.03.2010 21:12
Verständnisfrage: Aufruf von mehreren Usern vegeta PHP Tipps 2006 2 02.06.2006 15:39
[Erledigt] MySQL Abfrage aus mehreren Tabellen Datenbanken 1 12.04.2005 17:53
Rangliste etc... PHP Tipps 2004-2 3 10.12.2004 10:12
Probleme Mit der Rangliste die ich gebuat habe PHP-Fortgeschrittene 1 02.11.2004 08:42

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
php count rangliste, php steamid von usern abfragen, sql rangliste

Alle Zeitangaben in WEZ +2. Es ist jetzt 19:37 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum