Home | Registrieren | Einloggen | Suchen | Aktuelles


Forum » PHP & MySQL » ORDER BY mit Wenn-Bedingung Antworten
ORDER BY mit Wenn-Bedingung

chip
Quasselstrippe


Beiträge: 391


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
Quasselstrippe


Beiträge: 391


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: 848


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
Quasselstrippe


Beiträge: 391


@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
Quasselstrippe


Beiträge: 391


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: 848


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
Quasselstrippe


Beiträge: 391


Ja, schon klar. Aber dazu brauche ich ja eine IF-Abfrage. Und die sollte am besten in SQL sein.

---

  Profil   Website   Editieren   Zitieren
 

Antworten
Nach oben