ORDER BY mit Wenn-Bedingung |
chip
Foren-Team Threadstarter
Beiträge: 419 |
Hi,
nach langer Zeit mal wieder eine Frage von mir: Gibt es eine Möglichkeit eine ORDER BY-Klausel in MySQL mit einer IF-Bedingung einzugrenzen?
Konkret geht es darum: Ich lese die neuesten Artikel auf meiner Seite aus. Nun sollen sie nach dem Datum des Updates (Timestamp) und dann nach dem Datum der Erstellung sortiert werden. Nun kann das Feld Update aber auch NULL sein und dann wäre die Sortierung falsch. Wie kann ich nun die Abrage gestalten, so dass nur nach Update sortiert wird, wenn das Feld nicht NULL ist?
---
|
 Profil
Website
Editieren
Zitieren
|
Korp
Otto-Normal-Poster
Beiträge: 57 |
du kannst eine if abfrage in eine variable packen und dann ORDER BY $variable machen
---
Interessen am PC:
html, web design, sql und php
|
 Profil
E-Mail
Website
Editieren
Zitieren
|
chip
Foren-Team Threadstarter
Beiträge: 419 |
Könntest du ein Beispiel geben?
---
|
 Profil
Website
Editieren
Zitieren
|
Korp
Otto-Normal-Poster
Beiträge: 57 |
ok anders
if($update >= 0){
order by time abfrage
}else{
order by update abfrage
}
das statt deiner abfrage mit den jeweiligen neuen abfragen
ist die update 0 sortiert er nach erstellung
ist die update höher als 0 sortiert er nach update
wenn ichs richtig verstanden habe
---
Interessen am PC:
html, web design, sql und php
|
 Profil
E-Mail
Website
Editieren
Zitieren
|
subjective
Forenheld
Beiträge: 844 |
Das wäre aber im PHP - nicht im MySQL.
MySQL kennt eine Funktion IF(). Mit Hilfe dieser Funktion kann main eine Ergebnisspalte zum Sortieren erstellen.
SELECT IF(Bedingung, ja, nein) AS aliasname FROM tabelle ORDER BY aliasname
---
Weaverslave
|
 Profil
Website
Editieren
Zitieren
|
chip
Foren-Team Threadstarter
Beiträge: 419 |
@subjective: Ja gut, aber das ist nicht das was ich suche. Ich möchte alle Artikel ausgeben. Nich nur die mit und ohne Update. Hier das genaue Problem für evtl. Lösungsansätze: Bei einem neu geschriebenen Artikel ist Update = NULL, also taucht er zuletzt in der Reihe auf und alle Artikel, egal ob sie älter oder neuer sind, mit Update tauchen vor diesem auf. Genau das will ich nicht.
Vielleicht hat ja jemand noch eine zündende Idee.
---
|
 Profil
Website
Editieren
Zitieren
|
Korp
Otto-Normal-Poster
Beiträge: 57 |
also du willst das deine update nicht in die order eingeht?
dann lass die zeit vond er update einfach weg und lass die alte zeit gespeichert
---
Interessen am PC:
html, web design, sql und php
|
 Profil
E-Mail
Website
Editieren
Zitieren
|
chip
Foren-Team Threadstarter
Beiträge: 419 |
Nee, nicht ganz. Das Update soll schon berücksichtigt werden. Wenn ein Artikel upgedatet wurde soll er an erster Stelle stehen. Aber wenn ein Artikel neu geschrieben wurde dann soll er über diesem stehen.
---
|
 Profil
Website
Editieren
Zitieren
|
subjective
Forenheld
Beiträge: 844 |
Du mußt nur die erste Sortierspalte flexibel erstellen - halt nur wenn "updated" nicht mehr NULL ist wird der Wert daraus verwendet. Sonst nimmst du den Wert aus "created". Als zweites Kriterium kannst du dann nochmal "created" nehmen...
---
Weaverslave
|
 Profil
Website
Editieren
Zitieren
|
chip
Foren-Team Threadstarter
Beiträge: 419 |
Ja, schon klar. Aber dazu brauche ich ja eine IF-Abfrage. Und die sollte am besten in SQL sein.
---
|
 Profil
Website
Editieren
Zitieren
|