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 24.12.2011, 13:23  
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

Ma so janz dumm gefragt, is der murks in der Datenbank wirklich mit ' ' und " " escaped ? falls ja, kriegt deine Datenbank das sort technisch nicht auf die Reihe, der Punkte-Stand sollte im feld "points" selbstredend als reale Zahle ( Integer ) hinterlegt sein.

desweiteren nutzt du JSON zum Austausch der Daten zum JQUERY-Request, ergo kannst du:

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 ) {
   
$output = 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;
      
$output[] = array((int)$points, (string)$steamid, (string)$name);
   }

   
$toClient json_encode($output);

verwenden. Da du allerdings keinerlei Feld-Normalisierung in der Datenbank zu haben scheinst, sollte folgender Source dich zum erfolg bringen:
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 ) {
   
$output = 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;
      
$output[] = array((int)$points, (string)$steamid, (string)$name);
   }

   
// sort
   
usort($output, function( $a$b ) {
      if ( 
$a[0] == $b[0] ) return 0;
      return 
$a[0] > $b[0] ? -1;
   });

   
$toClient json_encode($output);

P.S.: Es wird dir auffallen das der Source zwar nach punkte sortiert, allerdings nicht rückwärts ( von groß nach klein ) sondern vorwärts, du kannst entweder die bedingung innerhalb des closures umdrehen oder das output-Array vor der übergabe mit array_reverse() "umdrehen".

Anmerkung: Die benutzerdefinierte Sortierung entstand hier im Foreneditor, etwaiger nötiger Feinschliff ist anzuraten, keine Gewähr auf 100%ige Funktionalität.
__________________
Lasse mir ohne Anwendung von Gewalt Dinge schenken, Amazon weiß darüber bald mehr.

Geändert von tr0y (24.12.2011 um 13:42 Uhr).
tr0y ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 24.12.2011, 13:27  
Neuer Benutzer
 
Registriert seit: 07.11.2009
Beiträge: 10
PHP-Kenntnisse:
Fortgeschritten
jans befindet sich auf einem aufstrebenden Ast
Standard

Jo Entschuldigt, das hatte ich garnicht bemerkt.
Es funktioniert natürlich, blöder Fehler.

Danke meikel, danke tr0y °
jans ist offline   Mit Zitat antworten
Alt 24.12.2011, 13:38  
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 meikel Beitrag anzeigen
1. welchen Sinn hat das count() SELECT (außer daß der SQL Server beschäftigt wird)?
Prüfung auf Existenz von Datensätzen bezogen auf die eigentlich verwendete Bedingung die man auslesen möchte. Der Select COUNT(*) wird hierbei als vorzuziehende Möglichkeit in Dokumentationen vorgeschlagen und empfohlen, statt sich blind auf mysql_num_rows() zu verlassen.
__________________
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:50  
meikel
Gast
 
Beiträge: n/a
Standard

COUNT(*)
Zitat:
Zitat von tr0y Beitrag anzeigen
Prüfung auf Existenz von Datensätzen bezogen auf die eigentlich verwendete Bedingung die man auslesen möchte.
http://www.php.net/manual/de/mysqli.query.php
Zitat:
Returns FALSE on failure. For successful SELECT, SHOW, DESCRIBE or EXPLAIN queries mysqli_query() will return a MySQLi_Result object. For other successful queries mysqli_query() will return TRUE.

Zitat:
Der Select COUNT(*) wird hierbei als vorzuziehende Möglichkeit in Dokumentationen vorgeschlagen und empfohlen, statt sich blind auf mysql_num_rows() zu verlassen.
Wenn die Ergebnismenge einer SELECT Abfrage == 0 ist, wird die übliche while Schleife kommentarlos verlassen.

Ein COUNT() macht nur dann Sinn, wenn man das genaue Ergebnis benötigt.
  Mit Zitat antworten
Alt 24.12.2011, 13:53  
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

Ist mir klar, meikel, ein 0 Zeilen SELECT ist aber genauso "true" wie ein SELECT mit 100.000 Zeilen. Den row-Count zu behandeln bevor der Murks gegen eine Schleife geworfen wird oder zu testen ob nach einer While-Schleife ein bestimmtes Ausgabe-Therm gefüllt wurde ist wohl jacke wie hose, nur das man nicht immer einen Ausgabe-Therm zur Verfügung hat. So setze ich die Vorgehensweise aus "Check before process" als besseren Kandidat, als "check after process any resulting thing".
__________________
Lasse mir ohne Anwendung von Gewalt Dinge schenken, Amazon weiß darüber bald mehr.
tr0y ist offline   Mit Zitat antworten
Alt 24.12.2011, 14:05  
meikel
Gast
 
Beiträge: n/a
Standard

Bevors zu "akademisch" wird:
es ist ja nicht falsch, COUNT() abzufragen. Intern wird der MySQL Client auch nix anderes veranstalten, um affected-/num rows zu füttern.
Und es ist auch und gerade dann ratsam, die Ergebnismenge zu wissen, wenn die Gefahr besteht, 10^5 Datensätze zu fetchen.

Im gegebenen Fall ist COUNT() allerdings genauso wertvoll, wie zB. ein
Code:
SELECT ... FROM tabelle WHERE pk = 12345 LIMIT 1,1
Zitat:
Zitat von tr0y Beitrag anzeigen
Ist mir klar, meikel,
Versteh mich nicht falsch, tr0y. Ich wollte Dich nicht belehren oder auch nur entfernt Deine Kenntnisse in Frage stellen.

Beide haben wir wohl unsere eigenen, personengebundenen Macken. Ich bin zB. extrem schreibfaul... und somit gegen ein Zeilenhonorar für Programmierer. <ggg>

Frohes Fest.
  Mit Zitat antworten
Alt 24.12.2011, 14:19  
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

Und jetzt stellen wir uns vor, Meikel, die Tabelle wächst und hat in einem Jahr 2,9 Billionen Einträge.. Kann man ja dann ma hingehen und dann endlich per count() checken was da so kommt, wenn ich das query wirklich fetch'e .. ^^

Ich weiß worauf du hinaus willst, meikel.

Auch dir ein Frohes Fest.
__________________
Lasse mir ohne Anwendung von Gewalt Dinge schenken, Amazon weiß darüber bald mehr.
tr0y ist offline   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

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