php.de

Zurück   php.de > Webentwicklung > Datenbanken

Datenbanken SQL und Co

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 04.11.2004, 14:57  
PHS
Erfahrener Benutzer
 
Registriert seit: 06.05.2004
Beiträge: 108
PHS
Standard sortierproblem

ich habe eine abfrage mit drei tabellen:
PHP-Code:
<?
    $qry 
"SELECT t1.id,t1.name,t1.fkt,t1.mail,(t2.rangpunkte + t2.rangpunktegesamt) as gpunkte,t3.rang,t3.punkte 
                FROM $tblmember as t1 
                LEFT JOIN $tblpunkte as t2 ON t2.memberid = t1.id 
                LEFT JOIN $tblrang as t3 ON t3.punkte <= (t2.rangpunkte + t2.rangpunktegesamt) 
                WHERE t1.status = 'aktiv' 
                GROUP BY t1.id, t1.name 
                ORDER BY t1.name ASC, t3.punkte DESC"
;
das sortieren nach 't1.name' geht wunderbar, aber t3.punkte will nicht.

hat jemand ne idee woran es liegt?
PHS ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 04.11.2004, 17:46  
Gast
 
Beiträge: n/a
Standard Vermutung

Es könnte daran liegen, daß t3.punkte den Wert NULL liefert, was die Sortierung stört.

Versuchs einmal so: ... ORDER BY t1.name ASC, IFNULL(t3.punkte,0) DESC"

mfG -dilemma-
  Mit Zitat antworten
Alt 04.11.2004, 19:33  
PHS
Erfahrener Benutzer
 
Registriert seit: 06.05.2004
Beiträge: 108
PHS
Standard

ne geht so leider auch nicht
PHS ist offline   Mit Zitat antworten
Alt 05.11.2004, 11:07  
Gast
 
Beiträge: n/a
Standard

Was heißt "...ne geht so leider auch nicht" ???

Vielleicht könnstet du ja einmal anzeigen, wie
a) das Ergebnis deiner Query aussieht, und
b) wie du es gerne haben möchtest.

Ob deine Query sinnvoll ist, kann man nicht beurteilen...

Vielleicht erklärst du einmal ganz genau, was du vorhast?

mfG -dilemma-
  Mit Zitat antworten
Alt 05.11.2004, 12:01  
Erfahrener Benutzer
 
Benutzerbild von lazydog
 
Registriert seit: 02.04.2008
Beiträge: 4.032
lazydog befindet sich auf einem aufstrebenden Ast
Standard

Die Verbindung zwischen t1 und t2 ist völlig unklar. JOINS mit ON können natürlich nur mit "=" verbunden werden (primary key = foreign key), da JOINS keine Bedingung darstellen, sondern die Beziehung zwischen zwei Tabllen. Also brauchst du aus t3 einen eindeutigen Verweis auf t2. Und die Bedingung gehört dann in die WHERE-Klausel. Was mich wundert, ist dass MySQL diese Abfrage überhaupt akzeptiert und nicht einen Fehler gerneriert.
__________________
Gruss
L
lazydog ist offline   Mit Zitat antworten
Alt 05.11.2004, 15:20  
PHS
Erfahrener Benutzer
 
Registriert seit: 06.05.2004
Beiträge: 108
PHS
Standard

gut ich versuch es mal zu erläutern:

das ergebnis soll eine member-liste (nur die aktiven) meinens clans sein, welche es hier schon gibt, aber wie man sieht (ganz unten) mit über 15 querys, was die schnelligkeit doch sehr belastet.

in der ersten tabelle (t1) sind alle member enthalten,
in der zweiten (t2) sind die punkte (dieses monats/gesamt) der einzelnen member enthalten,
in der dritten tabelle (t3) sind die ränge (rang | max. punkte) enthalten

ich möchte, dass die member alphabetisch nach namen sortiert werden (a-z) und die ränge nach den max. punkten sortiert werden, wobei der die größte punktzahl oben stehen soll, da ja die größte punktzahl gleich der aktuelle rang ist.
die sortierung der member geht ja, nur die ränge werden nach rang (z-a) sortiert.


ich hoffe das ist so einigermaßen verständlich ....oder?
PHS ist offline   Mit Zitat antworten
Alt 05.11.2004, 16:23  
Erfahrener Benutzer
 
Benutzerbild von lazydog
 
Registriert seit: 02.04.2008
Beiträge: 4.032
lazydog befindet sich auf einem aufstrebenden Ast
Standard

Du musst dich schon entscheiden, ob du die Liste nach Namen oder nach Punkten sortiert haben willst. Das einzige, was funktionieren könnte, wäre eine Sortierung nach Rang und dann als Name. Der JOIN zwischen t2 und t3 (nicht t1 und t2, wie ich fälschlicherweise geschrieben habe) ist trotzdem falsch. Aber um dir helfen zu können, bräuchte ich eine genauere Beschreibung der Tabellen (SHOW CRETATE TABLE tabelle) der einzelnen Tabellen
__________________
Gruss
L
lazydog ist offline   Mit Zitat antworten
Alt 07.11.2004, 19:17  
Benutzer
 
Registriert seit: 29.06.2004
Beiträge: 50
brain_overload
Standard der lazydog hat schon recht...

Es fehlt die Beziehung von t3 zu den anderen Tabelle(n)

Also t3 muss irgendeine Beziehung zu t1 oder t2 haben:
z.B. ...ON t3.id=t1.id...

...und folgendes gehört in die WHERE Bedingung:
t3.punkte <= (t2.rangpunkte + t2.rangpunktegesamt)

...dann sollte es funktionieren.
brain_overload 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
Sortierproblem PHP Tipps 2007 10 18.01.2006 19:07
sortierproblem //EDIT: sessionproblem lindner PHP Tipps 2005 8 31.05.2005 13:16
[Erledigt] Wieder einmal ein Sortierproblem: ORDER BY DESC 2x PHP Tipps 2005 6 01.02.2005 10:30


Alle Zeitangaben in WEZ +2. Es ist jetzt 01: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

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.