php.de

Zurück   php.de > Webentwicklung > Datenbanken

Datenbanken SQL und Co

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 08.03.2010, 17:11  
Erfahrener Benutzer
 
Registriert seit: 15.04.2004
Beiträge: 126
pcschröda
Standard "Erweiterte" Sortierung

Hallo,

Habe ein Problem, vor dem ich so noch nie gestanden habe:

Folgende Tabellen-Spalte soll mit einer MySQL-Abfrage sortiert ausgegeben werden:

Verfallsdatum
-------------
frei
20.04.2010
31.05.2010
-
frei
frei
Oma fragen
31.12.2020


So soll es nach der Sortierung aussehen:

Verfallsdatum
-------------
frei
frei
frei
20.04.2010
31.05.2010
31.12.2020
Oma fragen
-

Also: zuerst der String "frei", danach die Daten (wie 20.04.2010), danach alles andere. Ich weiss, es ist grausam, solch verschiedene Eingaben überhaupt in derselben Spalte zu akzeptieren, aber was soll's. Mit ASC und DESC komme ich erstmal nicht weiter. Irgendwelche Tipps?


Grüße,

Michael
pcschröda ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 08.03.2010, 17:17  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 34.241
PHP-Kenntnisse:
Fortgeschritten
nikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz sein
Standard

Das geht zwar, um die Frage nach dem Warum kommst Du trotzdem nicht drumherum.
__________________
--
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 08.03.2010, 18:39  
thomas_w
Gast
 
Beiträge: n/a
Standard

Hoffe, dass das kein vorgezogener 1. April Scherz ist. Ein paar Gedanken über die Datenqualität solltest Du Dir schon machen. Aber auf die schnelle gibt es auch hier eine Lösung... (jedenfalls für die paar Testdaten).

Code:
CREATE TABLE tabelle1 (
 verfallsdatum VARCHAR(10)
)

INSERT INTO tabelle1 VALUES
( 'frei'), ('20.04.2010'), 
( '31.05.2010'), ('20.04.2010'), 
( '-' ), ('frei'), 
( 'frei' ), ('Oma fragen'), 
( '31.12.2020');

         
mysql> SELECT verfallsdatum
    ->   FROM tabelle1
    -> ORDER BY CASE verfallsdatum
    ->           WHEN 'frei' THEN '0'
    ->           WHEN '-' THEN '99999'
    ->           WHEN 'Oma fragen' THEN '99998'
    ->           ELSE REVERSE(verfallsdatum)
    ->          END;
+---------------+
| verfallsdatum |
+---------------+
| frei          |
| frei          |
| frei          |
| 20.04.2010    |
| 20.04.2010    |
| 31.05.2010    |
| 31.12.2020    |
| Oma fragen    |
| -             |
+---------------+
9 rows in set (0.02 sec)
Viel Spaß damit..

Grüße
Thomas
  Mit Zitat antworten
Alt 08.03.2010, 22:21  
Erfahrener Benutzer
 
Registriert seit: 15.04.2004
Beiträge: 126
pcschröda
Standard

Warum? Der Kunde will in ein input-Feld, welches ein Datum erfassen soll, eben alles mögliche eingeben. Ich versuche gerade, ihm das auszureden.

Recht herzlichen Dank für die Hilfe, Thomas. Ich wusste nicht, dass man CASE auch zum Sortieren verwenden kann.
pcschröda ist offline   Mit Zitat antworten
Alt 08.03.2010, 22:36  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 34.241
PHP-Kenntnisse:
Fortgeschritten
nikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz sein
Standard

Das kann man aber auswerten, ob es ein Datum darstellt oder Freitext. Mit einem separaten Date-Feld hältst Du Dir viel mehr Möglichkeiten offen.
__________________
--
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 09.03.2010, 07:45  
thomas_w
Gast
 
Beiträge: n/a
Standard

Zitat:
Zitat von pcschröda Beitrag anzeigen
Warum? Der Kunde will in ein input-Feld, welches ein Datum erfassen soll, eben alles mögliche eingeben. Ich versuche gerade, ihm das auszureden.
Der Kunde hat natürlich immer recht, aber Du kannst ja versuchen den Datentyp des Input zu erkennen und in ein passendes Datenbank-Feld zu speichern.

Code:
CREATE TABLE eingaben (
 datum DATE,
 zahl INT,
 text VARCHAR(100)
)
Sinngemäß so...

PHP-Code:
if (preg_match('xx',$input)) {
  
$datum $input;
} else if (
preg_match(..))... {
 
$zahl = (int) $input;
} else  {
 
$text = (string) $input;

Grüße
Thomas
  Mit Zitat antworten
Alt 09.03.2010, 16:35  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 34.241
PHP-Kenntnisse:
Fortgeschritten
nikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz sein
Standard

Zitat:
Der Kunde hat natürlich immer recht
Einerseits ja, andererseits haben die wenigsten den technischen Background und es ist ihnen egal wie etwas funktioniert.

Zitat:
Sinngemäß so...
oder bspw. strtotime
__________________
--
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 14.03.2010, 00:34  
Erfahrener Benutzer
 
Registriert seit: 15.04.2004
Beiträge: 126
pcschröda
Standard

Ich sehe gerade, dass ich da wohl nicht drum herumkomme. Denn ein Datum im hierzulande gängigen Format tt.mm.jjjj kann ich in MySQL kaum verarbeiten.

Danke für die Tipps,

Michael
pcschröda 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
[Erledigt] Sortierung klappt nicht... yanfred PHP Tipps 2009 13 21.08.2009 10:58
Sortierung nach bestimmten Variablen "Status", Priorität" usw. Tyrra PHP Tipps 2009 13 28.07.2009 13:32
[Erledigt] teilausgabe eines arrays nach sortierung bananajoe PHP Tipps 2009 2 11.06.2009 00:22
[Erledigt] Inhalt mehrdimesionales array nach Sortierung ausgeben supervision PHP Tipps 2009 7 26.05.2009 21:08
Sortierung nach Datum Chewy Trash 1 09.02.2009 11:46
Sortierung von Datenbankinhalten Ramona86 PHP Tipps 2008 8 18.12.2008 11:15
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
Sortierung eines Arrays vollkommenegal PHP-Fortgeschrittene 5 14.07.2007 21:12
Sortierung nach punkten und Tordifferenz xXx PHP Tipps 2006 12 08.04.2006 16:28
[Erledigt] Eigene Sortierung bei der SQL-Abfrage Datenbanken 14 09.02.2006 10:53
MySQL abfrage mit berechneter Sortierung Dragon26mFR Datenbanken 5 08.05.2005 14:01
Sortierung der NULL-Inhalte Datenbanken 3 28.09.2004 22:16
[Erledigt] sortierung vom user aus Datenbanken 10 23.09.2004 18:02
Gleiche Abfrage, unterschiedliche sortierung juhuwoorps Datenbanken 2 05.09.2004 00:51


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:39 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