php.de

Zurück   php.de > Webentwicklung > Datenbanken

Datenbanken SQL und Co

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 20.12.2006, 19:48  
Benutzer
 
Registriert seit: 31.03.2005
Beiträge: 80
Anotherone
Standard Schwierige (?) Sortierung über 2 Felder

Hallo,

ich möchte gern eine Tabelle optimal auswerten, die Daten von Kunden enthält, wie der aktuelle Status ist. Dabei habe ich die Felder ID, Kunde, Datum, Status. Ich habe nun das Problem, das ich gerne einerseits nach Datum und andererseits nach Kunden sortieren möchte.

Folgendes Ergebnis ist der Wunsch

Felder wie oben (id, kunde...)

23 1 20061219 status1
24 1 20061218 status1
21 3 20061219 status2
20 2 20061217 status0

Ich mache nun folgende Abfrage:

Code:
SELECT * FROM Kundenstatus WHERE Datum>='20061217' ORDER BY Datum DESC, Kunde
bekomme ich aber folgendes Ergebnis:

23 1 20061219 status1
21 3 20061219 status2
24 1 20061218 status1
20 2 20061217 status0

Ändere ich die Abfrage in:

Code:
SELECT * FROM Kundenstatus WHERE Datum>='20061217' ORDER BY Kunde, Datum DESC
bekomme ich aber folgendes Ergebnis:

23 1 20061219 status1
24 1 20061218 status1
20 2 20061217 status0
21 3 20061219 status2

Was willl ich: Das nach Datum sortiert wird, wobei immer nur das höchste (jüngste) Datum zählt und somit die Kundennummer zusammengehalten wird und nicht verteilt wird. Geht das und wenn ja, wie?
Anotherone ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 20.12.2006, 20:25  
da schreibt der ElePHPant
 
Benutzerbild von Flor1an
 
Registriert seit: 18.06.2008
Beiträge: 8.903
PHP-Kenntnisse:
Fortgeschritten
Flor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer Anblick
Standard

Also ich würds so lösen einfach nach Datum sortieren und dann wenn du die Einträge ausliest ein Array erstellst etwa so:

PHP-Code:
<?php
$query 
mysql_query("SELECT * FROM Kundenstatus WHERE Datum>='20061217' ORDER BY Datum DESC");

$i 0;
$content = array();
while (
$row mysql_fetch_array($query)) {
    
$content[$row['Kunde']][$i] = $row;
    
$i++;
}

foreach (
$content as $tmp) {
    foreach (
$tmp as $row) {
        echo 
$row['Kunde'].' - '.$row['Datum'].'
'
;
    }
}
?>
Probiers mal aus damit müsste eigentlich die Sache richtig sortiert sein.
Flor1an ist offline   Mit Zitat antworten
Alt 21.12.2006, 15:30  
Erfahrener Benutzer
 
Registriert seit: 29.08.2003
Beiträge: 216
wurtzel
Standard

Code:
SELECT 
*,
(SELECT max (Datum) FROM Kundenstatus k2 where k2.Kunde=k.Kunde) as last
 FROM
 Kundenstatus k
HAVING last=Datum 
ORDER BY Kunde
__________________
Das Problem ist der Anfang einer Lösung
wurtzel ist offline   Mit Zitat antworten
Alt 28.12.2006, 09:42  
Benutzer
 
Registriert seit: 31.03.2005
Beiträge: 80
Anotherone
Standard

Vielen Dank für den guten Ansatz, habe ihn erst gestern abend entdeckt, da die Benachrichtigungsmail im Spam gelandet ist(?). Musste aber noch ein klein wenig was ändern, Ergebnis sieht jetzt so aus (und funktioniert)

Code:
SELECT
*,
(SELECT max (Datum) FROM Kundenstatus k2 where k2.Kunde=k.Kunde) as last
 FROM
 Kundenstatus k
HAVING last>='20061217'
ORDER BY last DESC, Kunde
Sonst bekam ich immer nur die Werte, die dem höchsten Datum entsprachen und ausschließlich nach Kundennummer sortiert, aber das Datum wild durcheinander.

In etwa so:

23 1 20061219 status1
20 2 20061217 status0
21 3 20061219 status2

Es fehlte also der Wert mit der id 24, da das Datum ja nicht dem max entspricht und es ist falsch sortiert.

Auf jeden Fall vielen, vielen Dank!
Anotherone ist offline   Mit Zitat antworten
Alt 28.12.2006, 14:31  
Erfahrener Benutzer
 
Registriert seit: 29.08.2003
Beiträge: 216
wurtzel
Standard

gut ich hattes so interprediert als wolltest du nur den Aktuellen(letzten) Status des Kunden haben.

Nur pass auf was du auswählst
HAVING last>='20061217' -> Alle Statuse des Kunden bei dem sich was nach dem 17.12.2006 geändert hat

oder willst du nur die Daten die sich nach dem 17.12.2006 geändert haben ->
where datum>='20061217'
__________________
Das Problem ist der Anfang einer Lösung
wurtzel ist offline   Mit Zitat antworten
Alt 28.12.2006, 16:10  
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

wie wär mit nem GROUP BY ?
nikosch ist offline   Mit Zitat antworten
Alt 28.12.2006, 16:40  
Benutzer
 
Registriert seit: 31.03.2005
Beiträge: 80
Anotherone
Standard

@wurtzel Das ist schon richtig so mit dem HAVING, es gibt noch ein paar weitere Felder, die ich aus Übersichtlichkeitsgründen weggelassen habe und die dann verschiedene Infos enthalten. Man könnte das zwar Tabellenseitig geschickter lösen (normalisieren), allerdings lohnt der Eingriff noch nicht. Und ich habe das Problem, das es teilweise Daten vor dem Prüfdatum gibt, die ich aber auch brauche. Sobald mindestens ein Vorgang nach dem Stichtag liegen, sollen alle Datensätze gefunden werden.

@nikosch77 GROUP BY liefert immer nur noch einen Datensatz pro Kunde, ich brauche aber alle.
Anotherone ist offline   Mit Zitat antworten
Alt 29.12.2006, 02:08  
Erfahrener Benutzer
 
Registriert seit: 29.08.2003
Beiträge: 216
wurtzel
Standard

@nikosch77 ein einfaches Group by hätte außerdem das Problem das man nicht sichersein kann wellche der zusamgefassten Daten am ende ausgibt

aber in form von
Code:
group_concat(concat( datum ,' ',staus,' ',text),'\n')
währe es auch mit group by realisierbar
__________________
Das Problem ist der Anfang einer Lösung
wurtzel ist offline   Mit Zitat antworten
Alt 31.12.2006, 02:48  
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

dafür gäbe es ja MAX(). das alle datensätze gefordert sind hatte ich leider nicht aus der aufgabe gelesen...
nikosch 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
sortierung brian johnson Datenbanken 6 05.05.2008 19:53
Sortierung eines Arrays nach ANZAHL Werte simsalabim PHP Tipps 2008 5 06.11.2007 13:44
mysql mehrere felder aus 2 tabellen bei vorhandensein eines cytrobic Datenbanken 9 30.06.2006 13:27
suche tutorial: FORMULAR FELDER AUF INHALT PRÜFEN PHP Tipps 2006 7 25.01.2006 19:14
[Erledigt] Große Felder wie TEXT auslagern? Datenbanken 9 26.10.2005 20:22
Formularauswertung: Leere Felder anzeigen maeck PHP Tipps 2005-2 1 18.09.2005 21:42
Suche MySQL Funktion zum Verbinden 2er Felder R4v3r Datenbanken 2 12.07.2005 23:49
2 Select Felder identifizieren HTML, Usability und Barrierefreiheit 4 29.06.2005 16:18
Zugriff auf Felder bei Inner Join Datenbanken 2 27.04.2005 14:40
Dynamisch Formular Felder erstellen Simon9990 PHP Tipps 2005 2 29.01.2005 22:00
Felder löschen!? PHP Tipps 2005 2 05.01.2005 14:36
Nach Formularcheck sind die Felder leer PHP Tipps 2007 6 04.01.2005 21:42
leere felder entfernen PHP Tipps 2007 14 04.01.2005 10:59
felder mqs PHP Tipps 2004-2 1 08.12.2004 17:03
felder gegebenen falls überprüfen und sonst mail schicken. lindner PHP Tipps 2004-2 1 14.11.2004 15:47

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
leere felder beim sortieren ignorieren, mysql php mehrere felder nach datum sortieren

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