php.de

Zurück   php.de > Webentwicklung > Datenbanken

Datenbanken SQL und Co

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 04.08.2011, 09:52  
Neuer Benutzer
 
Registriert seit: 04.08.2011
Beiträge: 13
PHP-Kenntnisse:
Anfänger
Napali befindet sich auf einem aufstrebenden Ast
Standard MySQL + PHP Tabellensortierung

Ich stecke gerade an einer (mehreren?) Abfrage(n) fest.

Also ich habe 2 Tabellen:

member (gekürzt, da einiges hier nicht relevant ist)
MemberID | Name | GuildID
1 | a | 1
2 | b | 2
3 | c | 2
...

und
member_points
MemberID | Date | Level | Points
1 | 2011-08-03 | 10 | 76783
1 | 2011-08-04 | 15 | 77667
2 | 2011-08-02 | 30 | 98546
2 | 2011-08-03 | 31 | 107085
2 | 2011-08-04 | 31 | 109249
3 | 2011-08-02 | 31 | 77957
3 | 2011-08-03 | 31 | 85195
3 | 2011-08-04 | 31 | 85757
...

Was ich jetzt haben möchte ist eine Ausgabe wie folgt:

Name | Min(Date) | Level | Points | Max(Date) | Level | Points | Differenz Level | Differenz Points

Also zu einem Namen jeweils das Level und die Punkte des kleinsten und größten Datums. Dabei allerdings nur von denen mit einer bestimmten GuildID (also z.B. 2).
Die Tabelle so bekomme ich auch hin, eine Sortierung nach den Namen funktioniert auch, nur habe ich mit meinen Abfragen + PHP-Code die Möglichkeit verbaut nach Level und Points zu sortieren (von Min(Date) UND Max(Date)).
Nach Level und Punkte des Min(Date) konnte ich schonmal sortieren, allerdings war das viel zu umständlich.

Nach was sortiert werden soll, will ich später per $_GET an die MySQL-Abfrage übergeben.

Ich bin für jede Hilfe dankbar.

MfG Napali
Napali ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 04.08.2011, 09:58  
Erfahrener Benutzer
 
Registriert seit: 01.09.2010
Beiträge: 4.561
PHP-Kenntnisse:
Fortgeschritten
eagle275 ist ein sehr geschätzer Menscheagle275 ist ein sehr geschätzer Menscheagle275 ist ein sehr geschätzer Mensch
Standard

das geht mit nem anständigen Join bzw mehreren davon (Join kann man auch auf die gleiche Tabelle machen) ....

welchen Ansatz hast du denn bisher?
__________________
"Irren ist männlich", sprach der Igel und stieg von der Drahtbürste
eagle275 ist offline   Mit Zitat antworten
Alt 04.08.2011, 10:06  
Neuer Benutzer
 
Registriert seit: 04.08.2011
Beiträge: 13
PHP-Kenntnisse:
Anfänger
Napali befindet sich auf einem aufstrebenden Ast
Standard

Aber nich lachen XD

Mein Code sieht so aus.
PHP-Code:
<?php
if(!@$_GET['guild']){$_GET['guild']=1;}
    
$ergebnis mysql_query("SELECT MemberID, Name, GuildID FROM member WHERE GuildID=".$_GET['guild']." ORDER BY Name");
    
$query mysql_query("SELECT MAX(Date) FROM member, member_points WHERE member.MemberID=member_points.MemberID AND GuildID='".$_GET['guild']."' LIMIT 1");
    
$resultX mysql_fetch_assoc($query);
    
$update $resultX['MAX(Date)'];

    echo 
"<br><br>Letztes Update: ".date('d.m.Y'strtotime($update));
    echo 
"<table border=1 cellspacing=1 cellpadding=4>";
    echo 
"<tr align=center style=\"font-weight:bold\">";
    echo 
"<td>Name</td>";
    echo 
"<td width=".$tabelle_spacer." style=\"border:0\"> </td>";
    if(
$zeitraum){
        echo 
"<td>Zeitraum</td>";
        echo 
"<td width=".$tabelle_spacer." style=\"border:0\"> </td>";
        echo 
"<td>Level<br>alt</td>";
        echo 
"<td>Punkte<br>alt</td>";
        echo 
"<td width=".$tabelle_spacer." style=\"border:0\"> </td>";
    }else{
        echo 
"<td width=".$tabelle_spacer." style=\"border:0\"> </td>";
        echo 
"<td>Datum</td>";
        echo 
"<td>Level<br>alt</td>";
        echo 
"<td>Punkte<br>alt</td>";
        echo 
"<td width=".$tabelle_spacer." style=\"border:0\"> </td>";
        echo 
"<td>Datum</td>";
    }
    echo 
"<td>Level<br>neu</td>";
    echo 
"<td>Punkte<br>neu</td>";
    echo 
"<td width=".$tabelle_spacer." style=\"border:0\"> </td>";
    echo 
"<td>Differenz<br>Level</td>";
    echo 
"<td>Differenz<br>Punkte</td>";
    echo 
"</tr>";

    while(
$row mysql_fetch_object($ergebnis)) {
        
$query mysql_query("SELECT MIN(Date) FROM member, member_points WHERE member.MemberID=member_points.MemberID AND Name='".$row->Name."'");
        
$result1 mysql_fetch_assoc($query);
        
$query mysql_query("SELECT MAX(Date) FROM member, member_points WHERE member.MemberID=member_points.MemberID AND Name='".$row->Name."'");
        
$result2 mysql_fetch_assoc($query);
        
$mindate $result1['MIN(Date)'];
        
$maxdate $result2['MAX(Date)'];

    if(
strtotime($mindate) < strtotime($maxdate)-(86400*($zeitraum_zeit-1))){
        
$mindate date('Y-m-d'strtotime($maxdate)-(86400*($zeitraum_zeit-1)));
    }

    
//echo "<br>".(strtotime($maxdate)-strtotime($mindate))/86400;

    
$querymysql_query("SELECT * FROM member_points WHERE MemberID=".$row->MemberID." AND Date='".$mindate."'");
    
$result3 mysql_fetch_assoc($query);
    
$querymysql_query("SELECT * FROM member_points WHERE MemberID=".$row->MemberID." AND Date='".$maxdate."'");
    
$result4 mysql_fetch_assoc($query);

    if(
$maxdate){
        
$DiffL=$result4['Level']-$result3['Level'];
        
$DiffP=$result4['Points']-$result3['Points'];
        echo 
"<tr>";
        echo 
'<td><a href="#">'.$row->Name.'</a></td>';
        echo 
"<td style=\"border:0\"> </td>";
        if(
$zeitraum){
            echo 
"<td>".((strtotime($maxdate)-strtotime($mindate))/86400)." Tage</td>";
            echo 
"<td style=\"border:0\"> </td>";
            echo 
"<td align=right>".$result3['Level']."</td>";
            echo 
"<td align=right>".$result3['Points']."</td>";
            echo 
"<td style=\"border:0\"> </td>";
        }else{
            echo 
"<td style=\"border:0\"> </td>";
            echo 
"<td>".date('d.m.Y'strtotime($mindate))."</td>";
            echo 
"<td align=right>".$result3['Level']."</td>";
            echo 
"<td align=right>".$result3['Points']."</td>";
            echo 
"<td style=\"border:0\"> </td>";
            echo 
"<td>".date('d.m.Y'strtotime($maxdate))."</td>";
        }
        echo 
"<td align=right>".$result4['Level']."</td>";
        echo 
"<td align=right>".$result4['Points']."</td>";
        echo 
"<td style=\"border:0\"> </td>";
        echo 
"<td align=right>".$DiffL."</td>";
        echo 
"<td align=right>".$DiffP."</td>";
        echo 
"</tr>";
    }
    echo 
"</table>";

?>
Napali ist offline   Mit Zitat antworten
Alt 04.08.2011, 11:28  
Erfahrener Benutzer
 
Registriert seit: 01.06.2011
Beiträge: 389
PHP-Kenntnisse:
Anfänger
achtelpetit befindet sich auf einem aufstrebenden Ast
Standard

Ob sich jemand findet, der das lesen und verstehen will?
Heißer Tipp: bau Dir ein SQL-Statement mit festen Werten statt Variablen und probier das in PHP-MyAdmin aus; und hübsch sauber gegliedert mit Zeilenumbrüchen und so.
Wenn das läuft kannst du es sehr einfach in PHP übernehmen.
achtelpetit ist gerade online   Mit Zitat antworten
Alt 04.08.2011, 11:31  
Erfahrener Benutzer
 
Registriert seit: 03.08.2010
Beiträge: 1.140
PHP-Kenntnisse:
Anfänger
hausl wird schon bald berühmt werdenhausl wird schon bald berühmt werden
Standard

Und Werte von GET nicht direkt 1:1 in die query nehmen, das kann böse enden. Besser mit (int) oder intval() in eine Variable casten dann hast du eine "sichere" INT als Wert. (und die @ sollten auch ned sein).

LG
__________________
Keine Zahl != ein Zeichen das keine Zahl ist
hausl ist offline   Mit Zitat antworten
Alt 04.08.2011, 12:10  
Neuer Benutzer
 
Registriert seit: 04.08.2011
Beiträge: 13
PHP-Kenntnisse:
Anfänger
Napali befindet sich auf einem aufstrebenden Ast
Standard

Deswegen hatte ich den Code von anfang an nicht gepostet, da der - wie gesagt - nicht so wirkt, wie ich das haben will

Hier nochmal gekürzt und kommentiert:
PHP-Code:
<?php
// Mitglieder aus der DB holen
    
$ergebnis mysql_query("SELECT MemberID, Name, GuildID FROM member WHERE GuildID=".$_GET['guild']." ORDER BY Name");

// Tabellenkopf ausgeben
// ...

// Mitglieder Zeilenweise ausgeben (Start)
    
while($row mysql_fetch_object($ergebnis)) {

// Für aktuelles Mitglied den Eintrag mit kleinstem Datum finden
        
$query mysql_query("SELECT MIN(Date) FROM member, member_points WHERE member.MemberID=member_points.MemberID AND Name='".$row->Name."'");
        
$result1 mysql_fetch_assoc($query);

// Für aktuelles Mitglied den Eintrag mit größtem Datum finden
        
$query mysql_query("SELECT MAX(Date) FROM member, member_points WHERE member.MemberID=member_points.MemberID AND Name='".$row->Name."'");
        
$result2 mysql_fetch_assoc($query);

// Die 2 Datumsangeben in Variablen speichern
        
$mindate $result1['MIN(Date)'];
        
$maxdate $result2['MAX(Date)'];

// Prüfen ob kleines Datum weiter als 7 Tage zurück liegt
    
if(strtotime($mindate) < strtotime($maxdate)-(86400*($zeitraum_zeit-1))){
        
$mindate date('Y-m-d'strtotime($maxdate)-(86400*($zeitraum_zeit-1)));
    }

// Level und Punkte des kleinen Datums holen
    
$querymysql_query("SELECT * FROM member_points WHERE MemberID=".$row->MemberID." AND Date='".$mindate."'");
    
$result3 mysql_fetch_assoc($query);

// Level und Punkte des großenDatums holen
    
$querymysql_query("SELECT * FROM member_points WHERE MemberID=".$row->MemberID." AND Date='".$maxdate."'");
    
$result4 mysql_fetch_assoc($query);


// Differenz der Level und Punkte bilden
        
$DiffL=$result4['Level']-$result3['Level'];
        
$DiffP=$result4['Points']-$result3['Points'];

// Ausgabe der Zeile
        
echo "<tr>";
        echo 
'<td><a href="#">'.$row->Name.'</a></td>';
        echo 
"<td style=\"border:0\"> </td>";
        echo 
"<td style=\"border:0\"> </td>";
        echo 
"<td>".date('d.m.Y'strtotime($mindate))."</td>";
        echo 
"<td align=right>".$result3['Level']."</td>";
        echo 
"<td align=right>".$result3['Points']."</td>";
        echo 
"<td style=\"border:0\"> </td>";
        echo 
"<td>".date('d.m.Y'strtotime($maxdate))."</td>";
        echo 
"<td align=right>".$result4['Level']."</td>";
        echo 
"<td align=right>".$result4['Points']."</td>";
        echo 
"<td style=\"border:0\"> </td>";
        echo 
"<td align=right>".$DiffL."</td>";
        echo 
"<td align=right>".$DiffP."</td>";
        echo 
"</tr>";
}

// Tabelle schließen
// ...
?>
Wie gesagt damit kann ich nicht nach Punkten/Level sortieren.
Ich möchte es ja so haben wie oben beschrieben...
Napali ist offline   Mit Zitat antworten
Alt 04.08.2011, 12:46  
Erfahrener Benutzer
 
Registriert seit: 01.06.2011
Beiträge: 389
PHP-Kenntnisse:
Anfänger
achtelpetit befindet sich auf einem aufstrebenden Ast
Standard

Ob sich jemand findet, der das lesen und verstehen will?
Heißer Tipp: bau Dir ein SQL-Statement mit festen Werten
statt Variablen und probier das in PHP-MyAdmin aus; und hübsch sauber gegliedert mit Zeilenumbrüchen und so.
Wenn das läuft kannst du es sehr einfach in PHP übernehmen.
achtelpetit ist gerade online   Mit Zitat antworten
Alt 04.08.2011, 12:47  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.987
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

Ich Schleifen verschachtelte DB-Abfragen sind auf jeden Fall der falsche Weg.
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist offline   Mit Zitat antworten
Alt 04.08.2011, 13:19  
Neuer Benutzer
 
Registriert seit: 04.08.2011
Beiträge: 13
PHP-Kenntnisse:
Anfänger
Napali befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
bau Dir ein SQL-Statement mit festen Werten
statt Variablen und probier das in PHP-MyAdmin aus
Wenn ich ne Idee hätte, wie dieses Statement aussehen könnte, würde ich hier nicht fragen

Zitat:
Ich Schleifen verschachtelte DB-Abfragen sind auf jeden Fall der falsche Weg.
Das ist mir selbst auch klar.
Napali ist offline   Mit Zitat antworten
Alt 04.08.2011, 17:46  
Neuer Benutzer
 
Registriert seit: 16.06.2011
Beiträge: 18
PHP-Kenntnisse:
Fortgeschritten
]jolly[ befindet sich auf einem aufstrebenden Ast
Standard

Hier einmal ein kleiner Ansatz für dich
Code:
SELECT small.Name AS Name, small.Date AS MinDate, small.Level, small.Points, big.Date AS MaxDate, big.Level, big.Points, (big.level - small.level) AS DiffLevel, (big.Points - small.Points) AS DiffPoints FROM (SELECT * FROM member JOIN member_points ON member.MemberID = member_points.MemberID WHERE member.MemberID = 1 ORDER BY DATE ASC LIMIT 0, 1) AS small, (SELECT * FROM member JOIN member_points ON member.MemberID = member_points.MemberID WHERE member.MemberID = 1 ORDER BY DATE DESC LIMIT 0, 1) AS big
:: nicht getestet, hab ich hier im Editor geschrieben und ist nur einmal ein kleiner anstoß
]jolly[ 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
Mysql funktioniert nicht (Erweiterung nicht erkannt!?) pfump Server, Hosting und Workstations 10 17.03.2012 11:07
[Erledigt] Datensätze von einer MySQL in eine andere MySQL Datenbank abgleichen Marvin75 Datenbanken 7 10.06.2011 18:00
Mysql Server startet nicht mehr Nicolas2006 Datenbanken 2 20.03.2011 16:03
PHP Zugriff auf MySQL Community Server gewähren daemonTutorials Datenbanken 8 21.02.2011 12:28
MySQL Datentransfer (Dateigroesse 4MB) via Shell Zugang oder einfacher promoterlv Datenbanken 1 14.11.2010 22:12
[Erledigt] PHP bekommt keine Verbindung zu MySQL SaKe Datenbanken 15 20.09.2010 14:45
Lerne Grundlagen | Quellensammlung cycap PHP Einsteiger 0 12.11.2008 16:23
[Erledigt] MySQL - ERROR 1044 bei erstellen einer Datenbank _youngenterpriser_ Datenbanken 2 05.02.2008 17:56
Mysql Server Einstellunen Optimieren pchero Datenbanken 3 01.05.2007 19:50
Schnittstelle zwischen PHP und MySQL klappt net !!! Datenbanken 16 16.10.2005 14:24
[Erledigt] not allowed to connect to this MySQL server PHP Tipps 2005-2 2 23.09.2005 18:34
MySQL &amp;amp; PHP: Problem mit Password() Datenbanken 10 19.09.2005 11:00
Suche Tipps für Persormance-Steigerung (Geld für Nützliches) Beitragsarchiv 18 16.08.2005 10:57
MYSQL läuft nur wenn /tmp auf 777 Datenbanken 5 06.07.2005 08:38
mysql root passwort vergessen Datenbanken 1 29.05.2005 11:33

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
tabellensortierung php, php tabellensortierung mit ahref, php tabellensortierung, order by datum asc limit 1, mysql query jolly zeichen, php tabellen sortieren, php sortierung mysql übergeben, mysql tabelle max nach datum sortiert, mysql php tabellen sortierung, min wert mit php sortieren, mysql datenbank tabellen sortieren php, php tabelle sortieren

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