MySQL Abfrage sortieren – SELFHTML-Forum Forum als Ergänzung zum SELFHTML-Wiki und zur Dokumentation SELFHTML https://forum.selfhtml.org/self MySQL Abfrage sortieren Sat, 22 Jul 17 15:15:01 Z https://forum.selfhtml.org/self/2017/jul/22/mysql-abfrage-sortieren/1699735#m1699735 https://forum.selfhtml.org/self/2017/jul/22/mysql-abfrage-sortieren/1699735#m1699735 <p>Hallo zusammen,</p> <p>ich habe ein Problem bei einer MySQL-Abfrage.</p> <p>Ich habe unter phpMyAdmin eine Tabelle nach der Spalte "datum" sortiert. Doch wenn ich die Tabelle mit Hilfe von PHP auslese, ist diese Ausgabe nicht sortiert.</p> <p>Meine Frage ist nun, wie kann ich die Ausgabe nach "datum" sortieren. (Die Spalte hat die Formatierung "date".)</p> <p><strong>Die Tabelle sieht folgendermaßen aus:</strong></p> <pre><code class="block language-mysql">id datum ereignis 1 25.07.2017 Testtermin 3 25.07.2017 Termin 2 28.07.2017 Neuer </code></pre> <p><strong>Der Abfrage-Code sieht so aus:</strong></p> <pre><code class="block language-php"><span class="token php language-php"><span class="token delimiter important"><?php</span> <span class="token comment">//Tagesdatum festlegen </span> <span class="token variable">$timestamp</span> <span class="token operator">=</span> <span class="token function">time</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">//$datum = date("md", $timestamp);</span> <span class="token variable">$d1</span> <span class="token operator">=</span> <span class="token function">date</span><span class="token punctuation">(</span><span class="token string double-quoted-string">"Y-m-d"</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$d8</span> <span class="token operator">=</span> <span class="token function">date</span><span class="token punctuation">(</span><span class="token string double-quoted-string">"Y-m-d"</span><span class="token punctuation">,</span> <span class="token function">strtotime</span><span class="token punctuation">(</span><span class="token string double-quoted-string">"+7 days"</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$ausgabe</span> <span class="token operator">=</span> <span class="token keyword">array</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">require_once</span> <span class="token punctuation">(</span><span class="token string single-quoted-string">'./konfiguration.php'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$db_link</span> <span class="token operator">=</span> <span class="token function">mysqli_connect</span> <span class="token punctuation">(</span><span class="token constant">MYSQL_HOST</span><span class="token punctuation">,</span><span class="token constant">MYSQL_BENUTZER</span><span class="token punctuation">,</span><span class="token constant">MYSQL_KENNWORT</span><span class="token punctuation">,</span><span class="token constant">MYSQL_DATENBANK</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$select</span> <span class="token operator">=</span> <span class="token string double-quoted-string">"SELECT * FROM `kalender` WHERE datum BETWEEN '<span class="token interpolation"><span class="token variable">$d1</span></span>' AND '<span class="token interpolation"><span class="token variable">$d8</span></span>'"</span><span class="token punctuation">;</span> <span class="token variable">$erg_select</span> <span class="token operator">=</span> <span class="token function">mysqli_query</span><span class="token punctuation">(</span><span class="token variable">$db_link</span><span class="token punctuation">,</span> <span class="token variable">$select</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">while</span> <span class="token punctuation">(</span><span class="token variable">$day</span> <span class="token operator">=</span> <span class="token function">mysqli_fetch_array</span><span class="token punctuation">(</span> <span class="token variable">$erg_select</span><span class="token punctuation">,</span> <span class="token constant">MYSQL_ASSOC</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token variable">$var</span> <span class="token operator">=</span> <span class="token variable">$day</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'datum'</span><span class="token punctuation">]</span><span class="token punctuation">;</span> <span class="token variable">$neu</span> <span class="token operator">=</span> <span class="token function">explode</span><span class="token punctuation">(</span><span class="token string double-quoted-string">"-"</span><span class="token punctuation">,</span><span class="token variable">$var</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$date</span> <span class="token operator">=</span> <span class="token variable">$neu</span><span class="token punctuation">[</span><span class="token number">2</span><span class="token punctuation">]</span><span class="token operator">.</span><span class="token string double-quoted-string">"."</span><span class="token operator">.</span><span class="token variable">$neu</span><span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">]</span><span class="token operator">.</span><span class="token string double-quoted-string">"."</span><span class="token operator">.</span><span class="token variable">$neu</span><span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">;</span> <span class="token keyword">echo</span> <span class="token variable">$date</span> <span class="token operator">.</span> <span class="token string double-quoted-string">": "</span><span class="token punctuation">;</span> <span class="token keyword">echo</span> <span class="token variable">$day</span><span class="token punctuation">[</span>ereignis<span class="token punctuation">]</span><span class="token punctuation">;</span> <span class="token keyword">echo</span> <span class="token string double-quoted-string">"<br>"</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> </span></code></pre> <p><strong>Ausgabe:</strong></p> <pre><code class="block">25.07.2017 Testtermin 28.07.2017 Neuer 25.07.2017 Termin </code></pre> <p>Wie kann die Ausgabe nun nach dem Datum sortiert werden? Derzeit wird die Ausgabe scheinbar nach der ID formatiert.</p> <p>Danke für die Hilfe! </p> MySQL Abfrage sortieren Sat, 22 Jul 17 15:20:54 Z https://forum.selfhtml.org/self/2017/jul/22/mysql-abfrage-sortieren/1699738#m1699738 https://forum.selfhtml.org/self/2017/jul/22/mysql-abfrage-sortieren/1699738#m1699738 <p>Hallo kevinkirs38,</p> <p>in SQL sortiert man mit <code>ORDER BY</code>.</p> <p>Bis demnächst<br> Matthias</p> <div class="signature">-- <br> Rosen sind rot. </div> MySQL Abfrage sortieren Sat, 22 Jul 17 15:23:02 Z https://forum.selfhtml.org/self/2017/jul/22/mysql-abfrage-sortieren/1699739#m1699739 https://forum.selfhtml.org/self/2017/jul/22/mysql-abfrage-sortieren/1699739#m1699739 <p>Hallo kevinkirs38,</p> <blockquote> <p>Wie kann die Ausgabe nun nach dem Datum sortiert werden?</p> </blockquote> <p>das Stichwort ist <a href="https://de.wikipedia.org/wiki/SQL#Abfrage_mit_Filter_und_Sortierung" rel="nofollow noopener noreferrer">ORDER BY</a> mit Angabe der betreffenden Spalte. Es kann sein, dass du die Datumsspalte erst als passenden Datentyp (z.B. DATE) auszeichnen musst, damit auch „richtig“ sortiert wird (wenn deine Daten als Strings behandelt werden, würde ja bei aufsteigender Sortierung der <strong>1</strong>0.08.2017 vor dem <strong>3</strong>0.07.2017 liegen).</p> <p>Gruß<br> Julius</p> MySQL Abfrage sortieren Sat, 22 Jul 17 18:14:01 Z https://forum.selfhtml.org/self/2017/jul/22/mysql-abfrage-sortieren/1699753#m1699753 https://forum.selfhtml.org/self/2017/jul/22/mysql-abfrage-sortieren/1699753#m1699753 <p>Hallo Kevin,</p> <blockquote> <p>Ich habe unter phpMyAdmin eine Tabelle nach der Spalte "datum" sortiert. Doch wenn ich die Tabelle mit Hilfe von PHP auslese, ist diese Ausgabe nicht sortiert.</p> </blockquote> <p>Kleiner Tipp: In phpMyAdmin wird das SQL-Statement angezeigt, mit dem die Ausgabe erzeugt worden ist.</p> <blockquote> <p><strong>Der Abfrage-Code sieht so aus:</strong></p> <pre><code class="block language-php"><span class="token php language-php"><span class="token delimiter important"><?php</span> <span class="token comment">// …</span> <span class="token variable">$select</span> <span class="token operator">=</span> <span class="token string double-quoted-string">"SELECT * FROM `kalender` WHERE datum BETWEEN '<span class="token interpolation"><span class="token variable">$d1</span></span>' AND '<span class="token interpolation"><span class="token variable">$d8</span></span>'"</span><span class="token punctuation">;</span> <span class="token variable">$erg_select</span> <span class="token operator">=</span> <span class="token function">mysqli_query</span><span class="token punctuation">(</span><span class="token variable">$db_link</span><span class="token punctuation">,</span> <span class="token variable">$select</span><span class="token punctuation">)</span><span class="token punctuation">;</span> </span></code></pre> </blockquote> <p>Brauchst du denn „beliebig alle Felder“ – <code>SELECT *</code> oder weißt du schon vorab, welche Felder du benötigst? Ein <code>SELECT datum,ereignis</code> ist u.U. performanter. Und dann noch ein Hinweis zur Sicherheit: Durch manipulierte Variablen <code>$d1</code> oder <code>$d8</code> kannst du prinzipiell aus deinem SQL-Statement ausbrechen. Nimm lieber ein <em>prepared statement</em>.</p> <p>In deinem Schleifencode kannst du alle doppelten Anführungszeichen durch einfache Ersetzen, weil keine Variableninterpolation stattfindet. Und es muss natürlich <code>$day['ereignis']</code> heißen.</p> <p>Viele Grüße<br> Robert</p> MySQL Abfrage sortieren Sat, 22 Jul 17 15:36:46 Z https://forum.selfhtml.org/self/2017/jul/22/mysql-abfrage-sortieren/1699742#m1699742 https://forum.selfhtml.org/self/2017/jul/22/mysql-abfrage-sortieren/1699742#m1699742 <p>Hallo Julius,</p> <p>vielen Dank für deine Antwort!</p> <p>Leider kenne ich mich nicht sehr gut mit MySQL aus.</p> <p>Wie kann ich den Datentyp auszeichnen, damit korrekt sortiert wird?</p> <p>Gruß</p> <p>Kevin</p> MySQL Abfrage sortieren Sat, 22 Jul 17 15:40:01 Z https://forum.selfhtml.org/self/2017/jul/22/mysql-abfrage-sortieren/1699744#m1699744 https://forum.selfhtml.org/self/2017/jul/22/mysql-abfrage-sortieren/1699744#m1699744 <p>Hallo Kevin,</p> <blockquote> <p>Wie kann ich den Datentyp auszeichnen, damit korrekt sortiert wird?</p> </blockquote> <p>Am einfachsten kannst du das mit einer grafischen Lösung machen. Wahrscheinlich hast du Zugriff auf PHPmyAdmin oder ein ähnliches Werkzeug, liege ich da richtig?</p> <p>Gruß<br> Julius</p> MySQL Abfrage sortieren Sat, 22 Jul 17 16:08:28 Z https://forum.selfhtml.org/self/2017/jul/22/mysql-abfrage-sortieren/1699745#m1699745 https://forum.selfhtml.org/self/2017/jul/22/mysql-abfrage-sortieren/1699745#m1699745 <p>Ja, ich verwende PHPmyAdmin</p> MySQL Abfrage sortieren Sat, 22 Jul 17 16:17:15 Z https://forum.selfhtml.org/self/2017/jul/22/mysql-abfrage-sortieren/1699747#m1699747 https://forum.selfhtml.org/self/2017/jul/22/mysql-abfrage-sortieren/1699747#m1699747 <p>Hallo Kevin,</p> <blockquote> <p>Ja, ich verwende PHPmyAdmin</p> </blockquote> <p>Dann müsstest du die betroffene Tabelle auswählen und dann auf den Reiter „Struktur“ klicken. Dort kannst du dann die Datentypen der einzelnen Tabellenspalten sehen. Dort müsstest du dann ggf. die betreffende Spalte zum bearbeiten auswählen und dort als Typ <code>DATE</code> einstellen. Du musst dann das Datum im Format <code>YYYY-MM-DD</code> also z. B. 2017-12-31 ablegen. Mit den <a href="https://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html" rel="nofollow noopener noreferrer">in MySQL eingebauten Datumsfunktionen</a> kannst du dir dann in den Queries auch die Ausgabe passend formatieren, also beispielsweise das hierzulande übliche Format <code>DD.MM.YYYY</code> ausgeben.</p> <p>Gruß<br> Julius</p> MySQL DATE Spalte sinnvoll Sat, 22 Jul 17 18:07:52 Z https://forum.selfhtml.org/self/2017/jul/22/mysql-abfrage-sortieren/1699752#m1699752 https://forum.selfhtml.org/self/2017/jul/22/mysql-abfrage-sortieren/1699752#m1699752 <p>Hallo Julius,</p> <p>nur mal so am Rande... (hatte ja schon mal erwähnt, dass ich in Bezug auf mysql etwas eingerostet bin und nutze daher wieder die Gelegenheit, das etwas aufzufrischen)</p> <p>Ich weiß noch ziemlich genau, dass ich früher zu Anfang, für Zeitangaben, auch die SQL-vordefinierten Möglichkeiten genutzt habe, dann aber sehr schnell erkannte, dass es für mich wesentlich effektiver und einfacher zu handhaben ist, wenn ich stattdessen UNIX-Timestamp eintrage oder ein eigenes Format (JahrMonatTagStdSek). Dummerweise, weiß ich leider nicht mehr warum. Wäre es in jedem Fall besser die SQL-Vordefinierung zu nutzen?</p> <p>Gruss<br> Henry</p> MySQL DATE Spalte sinnvoll Sat, 22 Jul 17 19:27:23 Z https://forum.selfhtml.org/self/2017/jul/22/mysql-abfrage-sortieren/1699755#m1699755 https://forum.selfhtml.org/self/2017/jul/22/mysql-abfrage-sortieren/1699755#m1699755 <p>Tach!</p> <blockquote> <p>Ich weiß noch ziemlich genau, dass ich früher zu Anfang, für Zeitangaben, auch die SQL-vordefinierten Möglichkeiten genutzt habe, dann aber sehr schnell erkannte, dass es für mich wesentlich effektiver und einfacher zu handhaben ist, wenn ich stattdessen UNIX-Timestamp eintrage oder ein eigenes Format (JahrMonatTagStdSek). Dummerweise, weiß ich leider nicht mehr warum.</p> </blockquote> <p>Vielleicht weil du dann nicht für Systeme, die mit Unix-Timestamps arbeiten (wie PHP) umformatieren musst. Andererseits kann man mittels zweier MySQL-Funktionen eine Umwandlung von und nach Unix-Timestamp veranlassen.</p> <blockquote> <p>Wäre es in jedem Fall besser die SQL-Vordefinierung zu nutzen?</p> </blockquote> <p>Wenn du lediglich Daten ablegst und nie in MySQL damit zu rechnen gedenkst, und dir die Anzeige in Programmen wie phpMyAdmin egal ist, oder du irgendeinen anderen Grund findest, kannst du das letzten Endes machen wie du willst.</p> <p>dedlfix.</p> MySQL DATE Spalte sinnvoll Sat, 22 Jul 17 19:32:42 Z https://forum.selfhtml.org/self/2017/jul/22/mysql-abfrage-sortieren/1699756#m1699756 https://forum.selfhtml.org/self/2017/jul/22/mysql-abfrage-sortieren/1699756#m1699756 <p>Hello,</p> <p>der Wertebereich im MySQL-Spaltentyp ist erheblich größer, als der vom UNIX-Timestamp.</p> <p>Liebe Grüße<br> Tom S.</p> <div class="signature">-- <br> Es gibt nichts Gutes, außer man tut es<br> Andersdenkende waren noch nie beliebt, aber meistens diejenigen, die die Freiheit vorangebracht haben.<br> </div> MySQL DATE Spalte sinnvoll Mon, 31 Jul 17 21:42:20 Z https://forum.selfhtml.org/self/2017/jul/22/mysql-abfrage-sortieren/1700535#m1700535 https://forum.selfhtml.org/self/2017/jul/22/mysql-abfrage-sortieren/1700535#m1700535 <p>Hallo Henry,</p> <p>daraufhin, dass dir bereits Experten geantwortet haben, habe ich (My)SQL-Laie mich zurück gehalten </p> <p>Aber eine kleine, vielleicht für dich interessante Ergänzung bringe ich dann doch noch an:<br> In SQLite<sup class="footnote-ref"><a href="#fn1" id="fnref1">[1]</a></sup> gibt es gar keinen extra Datentyp für Daten (Plural von Datum), sondern man benutzt die Datentypen <code>REAL</code>, <code>INTEGER</code> und <code>TEXT</code> zur Speicherung solcher. Die Werte werden von den Datums- und Zeitfunktionen <a href="https://sqlite.org/datatype3.html#date_and_time_datatype" rel="nofollow noopener noreferrer">passend interpretiert</a>.</p> <p>Gruß<br> Julius</p> <hr> <hr class="footnotes-sep"> <section class="footnotes"> <ol class="footnotes-list"> <li id="fn1" class="footnote-item"><p>Datenbank, die nicht nach dem Client-Server-Modell arbeitet und für die Integration in Software benutzt wird. Firefox nutzt SQLite beispielsweise zum Speichern von Lesezeichen. <a href="#fnref1" class="footnote-backref">↩︎</a></p> </li> </ol> </section> MySQL DATE Spalte sinnvoll Sat, 22 Jul 17 21:08:47 Z https://forum.selfhtml.org/self/2017/jul/22/mysql-abfrage-sortieren/1699758#m1699758 https://forum.selfhtml.org/self/2017/jul/22/mysql-abfrage-sortieren/1699758#m1699758 <p>Hallo dedlfix,</p> <blockquote> <p>Wenn du lediglich Daten ablegst und nie in MySQL damit zu rechnen gedenkst, und dir die Anzeige in Programmen wie phpMyAdmin egal ist, oder du irgendeinen anderen Grund findest, kannst du das letzten Endes machen wie du willst.</p> </blockquote> <p>irgendeinen anderen Grund... </p> <p>Ja, so langsam komme ich wieder dahinter. Echt, ich kann jedem nur empfehlen sich ausreichend Dokus/Chronologie für seine eigenen Scripte zuzulegen oder zumindest EINEN Namen hier im Forum beizubehalten (finde ab und zu bis zu 15/16 Jahre alte Beiträge vom mir hier, die als Gesamtheit mein Gedächnis wieder auf Trab bringen würden).</p> <p>Bei mir scheint der Grund gewesen zu sein, möglichst interne Formatierungen zu vermeiden, weil ich die meisten Scripte sowohl über Mysql als auch None-DB laufen lassen wollte. Klar geht das auch schön mit gekapselten Funktionen, aber gerade bei soclhen Formatierungen schien es mir besser. Wie gesagt, Erinnerung kommt nur laaaaangsaaam. ;-) Aber mit Datum als Zahlenwert zu rechnen war eigentlich nie das Problem, ging immer wunderbar. Nur, dass ich halt PHP zusätzlich dazu benötige...Insofern also Fazit: Wenn nichts gravierendes dagegen spricht, DATE/DATETIME bevorzugen für Datumsangaben, danke.</p> <p>Gruss<br> Henry</p> MySQL DATE Spalte sinnvoll Mon, 31 Jul 17 23:30:49 Z https://forum.selfhtml.org/self/2017/jul/22/mysql-abfrage-sortieren/1700541#m1700541 https://forum.selfhtml.org/self/2017/jul/22/mysql-abfrage-sortieren/1700541#m1700541 <p>Hallo Julius,</p> <blockquote> <p>...interessante Ergänzung bringe ich dann doch noch an:<br> In SQLite ...</p> </blockquote> <p>Ja Sqlite habe ich wirklich mal geliebt (simple, handlich, effektiv). Weiß auch nicht ob Vers. 1 oder 2, aber spätestens ab Vers. 3 wurde diese schöne DB dann auch leider zu gewaltig und komplizierter und damit (für mich) nicht mehr wirklich sinnvoll. Schade eigentlich, denn der große Vorteil, die DB immer als Datei dabei zu haben, machte das schön kompakt. Woran es jetzt im Einzelnen gelegen haben mag, weiß ich nicht mehr, aber du motivierst mich gerade, das Thema noch mal anzugehen. </p> <p>Gruss<br> Henry</p> MySQL DATE Spalte sinnvoll Tue, 01 Aug 17 22:40:00 Z https://forum.selfhtml.org/self/2017/jul/22/mysql-abfrage-sortieren/1700632#m1700632 https://forum.selfhtml.org/self/2017/jul/22/mysql-abfrage-sortieren/1700632#m1700632 <p>Hallo Henry,</p> <blockquote> <p>Ja Sqlite habe ich wirklich mal geliebt (simple, handlich, effektiv).</p> </blockquote> <p>Ich finde es vor allem praktisch, dass man beim Experimentieren immer nur die Datenbankdateien austauschen und sichern musste.</p> <p>Vielleicht ist für dich auch noch <a href="https://www.adminer.org/" rel="nofollow noopener noreferrer">Adminer</a> interessant (falls du es noch nicht kennst)? – Ist so ähnlich wie phpMyAdmin, aber nur eine PHP-Datei und kann auch mit SQLite umgehen.</p> <blockquote> <p>Woran es jetzt im Einzelnen gelegen haben mag, weiß ich nicht mehr, aber du motivierst mich gerade, das Thema noch mal anzugehen. </p> </blockquote> <p>Schön .</p> <p>Gruß<br> Julius</p>