SELFPHP: Version 5.8.2 Befehlsreferenz - Tutorial – Kochbuch – Forum für PHP Einsteiger und professionelle Entwickler

SELFPHP


Professional CronJob-Service

Suche



CronJob-Service    
bei SELFPHP mit ...



 + minütlichen Aufrufen
 + eigenem Crontab Eintrag
 + unbegrenzten CronJobs
 + Statistiken
 + Beispielaufrufen
 + Control-Bereich

Führen Sie mit den CronJobs von SELFPHP zeitgesteuert Programme auf Ihrem Server aus. Weitere Infos



:: Buchempfehlung ::

Einführung in XHTML, CSS und Webdesign

Einführung in XHTML, CSS und Webdesign zur Buchempfehlung
 

:: Anbieterverzeichnis ::

Globale Branchen

Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP  

 

:: Newsletter ::

Abonnieren Sie hier den kostenlosen SELFPHP Newsletter!

Vorname: 
Name:
E-Mail:
 
 

Zurück   PHP Forum > SELFPHP > MySQLi/PDO/(MySQL)

MySQLi/PDO/(MySQL) Anfänger, Fortgeschrittene oder Experten können hier Fragen und Probleme rund um MySQLi/PDO/(MySQL) diskutieren

Antwort
 
Themen-Optionen Ansicht
  #1  
Alt 13.05.2004, 00:38:44
Skyman Skyman ist offline
Anfänger
 
Registriert seit: Jul 2003
Ort: NRW
Beiträge: 76
"Natürliche" Sortierung möglich?

Hallo @all,

ich fürchte ich habe mir selber die Karten gelegt, jetzt versuche ich das beste daraus zu machen, vielleicht hat jemand eine geschickte Idee dazu:

Ich habe in einer MySQL-Tabelle ein Feld 'datum' vom Typ varchar. Alle dort getätigten Eingaben geschehen nach dem Schema '00-00-0000'
(also Tag-Monat-Jahr)

Ich weiß,wahrscheinlich wäre wohl der Typ 'date' besser gewesen... :-(
(jetzt sind aber schon fast 20.000 Datensätze drin...)

Bisher hatte ich damit auch kein Problem. Jetzt kommt eine Änderung in meinem Programm und ich müßte diese datumsbezogenen Daten sortieren und da ist mein Problem.
Die Sortierung dieses Feldes mittels ASC oder DESC ergibt eine nette Durcheinanderwürfelung von Daten, da ja als String sortiert von Anfang an sortiert wird, nämlich z.B. bei ASC:
02-12-2001
03-08-2001
03-10-2001... usw.

Völlig klar, denn erst wir der Tag, dann der Monat und dann das Jahr sortiert im String.
Wie kann ich die Sortierung "natürlich" also menschlich, sprich richtig machen?

Geht das nicht, kann man denn richtig sortieren, wenn ich den Tabellentyp in 'date' umwandel? Kann ich dann eine entsprechend sortierte SQL Abfrage durchführen mit ASC / DESC ?

Oder hat noch einer eine Idee...

Ich weiß nicht mehr weiter zur Zeit. Danke schonmal im Voraus..
__________________
Caesar: veni, vidi, vici /Er kam, sah und siegte
Skyman: Er kam, sah auch und zersägte seinen Computer
Mit Zitat antworten
  #2  
Alt 13.05.2004, 00:53:51
feuervogel feuervogel ist offline
SELFPHP Guru
 
Registriert seit: Jan 2004
Ort: Leipzig
Beiträge: 4.549
püüüüh...also mein spontaner einfall wäre jetzt, jedes feld per php in einen timestamp zu schmeißen und dann jeweils neu zu speichern...mal gucken ob es da nicht ne andere möglichkeit gibt...
Mit Zitat antworten
  #3  
Alt 13.05.2004, 01:06:37
Skyman Skyman ist offline
Anfänger
 
Registriert seit: Jul 2003
Ort: NRW
Beiträge: 76
Hallo feuervogel,

ja, das waren auch meine ersten Worte ;-)

Nun, wenn es gar nicht geschickt geht, dann werde ich wohl alle Daten wandeln müssen.
Nur, bevor ich alles auslese und in einen timestamp verwandel, kann ich da nicht hingehen und alle Datensätze in ein neues Feld vom Typ 'date' schreiben?

Meine Fragen dann dahingehend was die besondere Eigenschaft des SQL-Typs DATE ausmacht? Mit anderen Worten, warum gibt es gerade diesen Typ? Kann man darin gespeichert Datumsangaben dann einfach sortieren mit den bekannten Befehlen oder auch nicht?

Gruß
Martin
__________________
Caesar: veni, vidi, vici /Er kam, sah und siegte
Skyman: Er kam, sah auch und zersägte seinen Computer
Mit Zitat antworten
  #4  
Alt 13.05.2004, 12:37:56
feuervogel feuervogel ist offline
SELFPHP Guru
 
Registriert seit: Jan 2004
Ort: Leipzig
Beiträge: 4.549
hilft dir das?

http://www.mysql.de/doc/de/Date_calculations.html
Mit Zitat antworten
  #5  
Alt 14.05.2004, 02:02:37
Skyman Skyman ist offline
Anfänger
 
Registriert seit: Jul 2003
Ort: NRW
Beiträge: 76
Hallöchen auch,

ich bin ja immer wieder erstaunt was man alles für Befehle in eine SQL Abfrage stecken kann. ;-)

Aber ich habe jetzt die ganze Zeit rumprobiert, es funktioniert "etwas", aber auch nicht immer.
...schwer es jetzt genau zu erklären...

Ich gehe mal davon aus das gerade für diese datumsbezogenen Funktionen, wie in dem von dir genannten Artikel beschrieben, der Typus 'DATE' erfunden wurde, damit MySQL genau weiß wie der Datensatz aufgebaut ist.
Der Type DATE wird ja nach dem englischen Schema gespeichert, also 0000-00-00 (Jahr-Monat-Tag).
Bei mir ist der VARCHAR String ja nach dem Muster 00-00-0000, also Tag-Monat-Jahr.

Wenn die SQL Funktionen jetzt nach den Positionen der Daten den DATE String zerlegen, dann kann ich mir schon vorstellen das es zu Problemen kommt.

Aber ich verstehe nicht, warum es bei der Hälfte meiner Anwendungen geht und bei anderen nicht...?!?!?
MySQL mekkert ja auch nicht das ich nicht den Typ DATE habe, das ist ihm ja wohl auch egal, also scheint er auf die eine oder andere Art damit klarzukommen.

Merkwürdig....ich werde nochmal weitertesten...

Gruß
Skyman
__________________
Caesar: veni, vidi, vici /Er kam, sah und siegte
Skyman: Er kam, sah auch und zersägte seinen Computer
Mit Zitat antworten
  #6  
Alt 14.05.2004, 03:51:40
Benutzerbild von meikel (†)
meikel (†) meikel (†) ist offline
SELFPHP Guru
 
Registriert seit: Dec 2003
Ort: Erfurt
Alter: 75
Beiträge: 4.001
Re: "Natürliche" Sortierung möglich?

Zitat:
Original geschrieben von Skyman
>Ich habe in einer MySQL-Tabelle ein Feld 'datum' vom Typ varchar.
>Alle dort getätigten Eingaben geschehen nach dem Schema '00-00-0000'
>(also Tag-Monat-Jahr)

Eine sehr schlechte Idee.

>Ich weiß,wahrscheinlich wäre wohl der Typ 'date' besser gewesen... :-(
>(jetzt sind aber schon fast 20.000 Datensätze drin...)

Dann ändere das. Auch sowas kann man programmieren.

>Völlig klar, denn erst wir der Tag, dann der Monat und dann das Jahr sortiert im String.
>Wie kann ich die Sortierung "natürlich" also menschlich, sprich richtig machen?

Indem Du einen dafür geeigneten Spaltentyp verwendest. Alles andere ist Krampf.
Mit Zitat antworten
  #7  
Alt 14.05.2004, 03:59:09
Skyman Skyman ist offline
Anfänger
 
Registriert seit: Jul 2003
Ort: NRW
Beiträge: 76
Hallo meikel und feuervogel,

so, ich habe mich auch der Programmiererehre gebeugt und es vernünftig gemacht.

Ich weiß auch nicht was mich damals geritten hat da einfach varchar zu nehmen....
...und bitte keine Spekulationen jetzt ;-)))

Wie du schon geschrieben hast @meikel:
Ich habe ein Script geschrieben, welches mir alle Datumsangaben umgedreht hat und in einer neuen Spalte vom Typ DATE gepackt hat. Anschließend habe ich die alte Spalte gelöscht.

Ich gebe es ja nur kleinlaut zu:
Jetzt kann man auch einfach mit ASC und DESC ein Datumsfeld perfekt sortieren, ich bin schlichtweg begeistert :o)

noch @feuevogel:
Trotzdem Danke für deine Seite mit den Datumsfunktionen. Das kann ich auch gut brauchen und erspart mir womöglich neue peinliche Fragen.

Ich danke euch mal wieder

...und es zeigt sich wieder: Eine perfekte Planung zu Anfang erspart dir hinterher nur Scherereien, aber es hat ja gefunzt jetzt.
__________________
Caesar: veni, vidi, vici /Er kam, sah und siegte
Skyman: Er kam, sah auch und zersägte seinen Computer
Mit Zitat antworten
  #8  
Alt 14.05.2004, 12:28:08
Benutzerbild von meikel (†)
meikel (†) meikel (†) ist offline
SELFPHP Guru
 
Registriert seit: Dec 2003
Ort: Erfurt
Alter: 75
Beiträge: 4.001
Zitat:
Original geschrieben von Skyman
Ich habe ein Script geschrieben, welches mir alle Datumsangaben umgedreht hat und in einer neuen Spalte vom Typ DATE gepackt hat. Anschließend habe ich die alte Spalte gelöscht.
Respekt!

Zitat:
...und es zeigt sich wieder: Eine perfekte Planung zu Anfang erspart dir hinterher nur Scherereien, aber es hat ja gefunzt jetzt.
Genauso isses. Besonders Datenbankdesign ist echt knifflig, wenn es gut und schnell sein soll.
Mit Zitat antworten
  #9  
Alt 09.06.2004, 01:23:58
tapferesschneid tapferesschneid ist offline
Junior Member
 
Registriert seit: Jun 2003
Beiträge: 194
Für die, denen das auch mal so geht, noch das »Skript«:

Code:
ALTER TABLE tabelle CHANGE datum datum_alt VARCHAR(255);
ALTER TABLE tabelle ADD datum DATE AFTER datum_alt;
UPDATE tabelle SET datum = 
CONCAT(SUBSTRING(datum_alt, 7, 4), "-", 
       SUBSTRING(datum_alt, 4, 2), "-", 
       SUBSTRING(datum_alt, 1, 2));
ALTER TABLE tabelle DROP datum_alt;

edit:
Habe im Code eine 9 in eine 7 geändert

Geändert von tapferesschneid (23.06.2004 um 12:57:50 Uhr)
Mit Zitat antworten
Antwort


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind aus.
[IMG] Code ist aus.
HTML-Code ist aus.

Gehe zu


Alle Zeitangaben in WEZ +2. Es ist jetzt 18:55:14 Uhr.


Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.


© 2001-2024 E-Mail SELFPHP OHG, info@selfphp.deImpressumKontakt