Du befindest Dich im Archiv vom ABAKUS Online Marketing Forum. Hier kannst Du Dich für das Forum mit den aktuellen Beiträgen registrieren.

sql Ausgabe nach Datum

Ajax, Hijax, Microformats, RDF, Markup, HTML, PHP, CSS, MySQL, htaccess, robots.txt, CGI, Java, Javascript usw.
Neues Thema Antworten
muntafuner
PostRank 1
PostRank 1
Beiträge: 16
Registriert: 20.04.2008, 22:53

Beitrag von muntafuner » 12.01.2010, 20:11

Hallo.

Ich versuch gerade eine Ausgabe nach Datum zu machen. Leider habe ich wenig Erfolg. Ich hab nun schon viel gelesen aber ich finde keine Lösung.

Mein Weg:

$abfrage = "SELECT * FROM kalender WHER id = '$meinid' ORDER BY 'datum'";

Habe auch where anweisung probiert geht aber auch nicht. Weis wer ein einen einfach weg zu vergleichen, das ich nur neue Termine ausgebe und alte nicht mehr. Wie kann ich das einfach machen. Ich habe viele Ausgabe so sollte es nicht kompliziert sein.

Danke

cu
Holger
Mehr geht immer...
saugprofi.com

Anzeige von ABAKUS

von Anzeige von ABAKUS »


Hochwertiger Linkaufbau bei ABAKUS:
  • Google-konformer Linkaufbau
  • nachhaltiges Ranking
  • Linkbuilding Angebote zu fairen Preisen
  • internationale Backlinks
Wir bieten Beratung und Umsetzung.
Jetzt anfragen: 0511 / 300325-0

Stephan Zöllner
PostRank 3
PostRank 3
Beiträge: 99
Registriert: 26.11.2009, 19:37
Wohnort: Westerstetten

Beitrag von Stephan Zöllner » 12.01.2010, 20:33

Wie sieh denn Deine tabellen-Konstruktion aus?
Enthält sie tatsächlich ein Feld mit dem Bezeichner datum?
Wenn NEIN kann es garnicht gehn was Du willst.

Also laß mal die Datendefinition sehen sonst kann man Dir kaum helfen.
Wenn die DatenDef. nicht von Dir stammt würde ich es mal mit date versuchen oder die Hochkommata weglassen (kalender ist ja auch ohne Hochkommata).

JohnBi
PostRank 10
PostRank 10
Beiträge: 2957
Registriert: 22.02.2009, 20:31

Beitrag von JohnBi » 12.01.2010, 20:38

Code: Alles auswählen

$abfrage = "SELECT * FROM kalender WHERE id = '$meinid' AND datum>$datum ORDER BY 'datum' DESC"; 
irgendwie so, und $datum enthält eben das Datum ab wann die angezeigt werden soll und DESC sortiert in absteigender Reifenfolge ...
Probleme mit Google & Co.? Hier die Lösung! - Linktausch?! | Projekt kaufen?! |
-------------------------------------------
Der PostRank und das Anmeldedatum stehen in keinem Verhältnis zur Qualität der Antworten einiger User. {JohnBi, 2009}

Anzeige von ABAKUS

von Anzeige von ABAKUS »

SEO Consulting bei ABAKUS Internet Marketing
Erfahrung seit 2002
  • persönliche Betreuung
  • individuelle Beratung
  • kompetente Umsetzung

Jetzt anfragen: 0511 / 300325-0.


muntafuner
PostRank 1
PostRank 1
Beiträge: 16
Registriert: 20.04.2008, 22:53

Beitrag von muntafuner » 12.01.2010, 20:49

Mit der Abfrage:

$istdatum = date("d.m.Y");

$abfrage = "SELECT * FROM kalender WHERE meinid = '$meinid' AND datum > '$istdatum' ORDER BY 'datum' ASC";

datum ist das selbe Format. 01.02.2010 usw.

So ist das Ergebnis.

14.01.2010

14.06.2010

19.04.2010

22.01.2010

25.02.2010

26.01.2010

Ich hab kein tau wieso das nicht geht. SQL Hilfe schon aufgerufen. Nicht zu finden wieso es so nicht gehen soll.
Mehr geht immer...
saugprofi.com

Anonymous

Beitrag von Anonymous » 12.01.2010, 20:52

öhm... welcher Datentyp ist das feld datum?

Kassandra70
PostRank 4
PostRank 4
Beiträge: 198
Registriert: 11.01.2006, 00:48
Wohnort: Gran Canaria

Beitrag von Kassandra70 » 12.01.2010, 21:02

die db sortiert doch genau so, wie du das sagst ... ;-)
erst die 14, dann 19, 22, 25, 26 ...
edit: Und alles nach heute ;-) keine Zahl ist kleiner als 12.

sogar in absteigender Reihenfolge ....
(Edit: sorry AUFSTEIGEND meinte, kleine rechts-links-schwäche bei mir, verwechsle ich immer. Er hat ja asc drin.)

wenn du ein datum so leicht sortieren wolltest, dann müßte es yyyy-mm-dd vorliegen, so, mit deiner Abfrage, sortiert er ja zuerst die Tage die vorne stehen.
https://www.anabell.de - ein nicht optimiertes Projekt mit tausend Themen

Loptr
PostRank 7
PostRank 7
Beiträge: 593
Registriert: 07.08.2007, 11:13
Wohnort: Freiburg

Beitrag von Loptr » 12.01.2010, 22:07

So eine spontane Idee von mir:

- neues DB Feld anlegen
- Datum in unix timestamp umrechnen und ins DB Feld schreiben (am besten beim INSERT gleich diesen verwenden time() / now())
- sortieren / bzw. SQL Abfrage auf das Feld beziehen (sollte dann auch richtig mir ASC und DESC klappen)
- wieder in ein lesbares Datum umwandeln

Hilfe dazu

Mork vom Ork
PostRank 9
PostRank 9
Beiträge: 2557
Registriert: 08.07.2008, 11:07
Wohnort: Aufm Friedhof.

Beitrag von Mork vom Ork » 13.01.2010, 11:07

Loptr hat geschrieben:So eine spontane Idee von mir:

- neues DB Feld anlegen
- Datum in unix timestamp umrechnen und ins DB Feld schreiben (am besten beim INSERT gleich diesen verwenden time() / now())
Es gibt keinen Grund, hier das beschränkte Timestamp-Format zu benutzen, ein echter Datumstyp ist bei SQL schließlich vorhanden.
muntafuner hat geschrieben:$istdatum = date("d.m.Y");

$abfrage = "SELECT * FROM kalender WHERE meinid = '$meinid' AND datum > '$istdatum' ORDER BY 'datum' ASC";

datum ist das selbe Format. 01.02.2010 usw.

So ist das Ergebnis.
14.01.2010
14.06.2010
19.04.2010
Du hast deine Daten als Texte abgelegt und genau so sortiert MySQL auch, als Text, d.h. nach Alphabet und Ziffern. Dabei kommt selbstverständlich "19.04" nach "14.06", so wie "Berta.Hummelsbach" nach "Anton.Xylophon" kommt, obwohl der Nachname eine andere Reihenfolge vorgeben könnte. Die Unterteilung interessiert hier aber nicht, weder nach Vor- und Nachname noch nach Tag, Monat und Jahr, ein Textvergleich geht stur Zeichen für Zeichen vor.

Wenn du möchtest, dass MySQL nach Datum, also zeitlicher Abfolge sortiert, musst du für Daten auch eine Spalte vom dafür gedachten Typ Date anlegen, keine Textspalte.

Um deine vorhandene Tabelle zu korrigieren, gehe wie nachfolgend vor. Schau dir am Besten nach jedem Schritt die Tabelle an, um nachzuvollziehen, was dort passiert.

0. Alte Tabelle sichern! Falls dir was schiefgeht, kannst du dann den alten Zustand über die Sicherungskopie wiederherstellen. Falls du Zugriff auf phpMySQL oder etwas ähnliches hast, kannst du eine Sicherung mit der Exportfunktion (Export nach SQL) anlegen.

1. Alte Spalte datum in datumalt umbenennen:
alter table kalender change datum datumalt varchar(64);

2. Neue Spalte namens datum vom Typ Date anlegen, und zwar der Schönheit wegen hinter der Spalte datumalt:
alter table kalender add datum date after datumalt;

3. Daten von der alten Spalte in die neue kopieren. Dabei muss das Format mit der Funktion str_to_date() konvertiert werden, denn mit Texten im Format tt.mm.jjjj kann MySQL nichts anfangen:
update table kalender set datum=str_to_date(datumalt,"%d.%m.%Y");

4. Alte Spalte datumalt löschen:
alter table kalender drop datumalt;

Wenn du nach dieser Aktion ein select duchführst und die Daten wie gehabt mit order by datum sortierst, werden sie auch in der richtigen zeitlichen Abfolge erscheinen und nicht mehr nach Alphabet und Ziffern sortiert.

Wenn du zukünftig Daten in die Tabelle schreibst, musst du die Teile Tag, Monat und Jahr vorher in die richtige Reihenfolge bringen. MySQL erwartet das Datum im Format jjjjmmtt, zB 20100113 für den 13. Januar 2010. Für diese Formatierung kannst du entweder in SQL die Funktion str_to_date() verwenden, falls deine Daten als Text ankommen, oder PHP-seitig die Funktion date() zusammen mit dem Muster Ymd, falls deine Daten als Timestamp vorliegen.

Für die where-Klausel beim select gilt das Gleiche: Auch hier musst du das Datum in das richtige Format bringen. Dein eingangs zitiertes Beispiel müsste so aussehen:

$istdatum = date("Ymd");
$abfrage = "select * from kalender where meinid = '" . mysql_real_escape_string($meinid) . "' AND datum > " . $istdatum . " order by datum";

PS: Bitte benutze immer, wenn du Variablen in eine SQL-Anweisung einfügst, die Funktion mysql_real_escape_string(), um den Inhalt der Variablen zu entschärfen! Dies gilt doppelt und dreifach, wenn die Daten von draußen kommen, zB über ein Webformular!
Das Einschmuggeln von manipulierten Daten über ungesicherte SQL-Anweisungen ist die Sicherheitslücke überhaupt.
[/i]
Zuletzt geändert von Mork vom Ork am 13.01.2010, 11:18, insgesamt 1-mal geändert.

nerd
PostRank 10
PostRank 10
Beiträge: 4023
Registriert: 15.02.2005, 04:02

Beitrag von nerd » 13.01.2010, 11:14

auf die idee '..where datum >= NOW() ...' zu verwenden kommt wohl keiner? ansonten fuehr mal ein "show create table kalender" aus und poste das ergebniss, ansonsten wird hir nur geschaetzt ...

Antworten
  • Vergleichbare Themen
    Antworten
    Zugriffe
    Letzter Beitrag