MySQL Ausgabe sortieren nach Datum (n. älter 30 T.) danach sortieren nach Feld featured
Hallo zusammen
Ich habe für das Contao CMS eine BE-Extension für meine Projekte geschrieben. Man kann ein Projekt erfassen und gegebenenfalls ein Projekt mit einer Checkbox "featured" bevorzugen. (in der DB featured = 0 oder 1)
Im FE werden dann alle Projekte via SQL-Abfrage und PHP aufgelistet. Sortiert nach den bevorzugten Projekten (die sind wichtig und sollen dem Besucher sofort auffallen).
Nun möchte ich die Projekte aber auch noch nach Datum sortieren (ich habe ein Feld Erstellungsdatum). Die neusten (nicht älter als 30 Tage) sollen vor den bevorzugten Projekten aufgelistet werden.
Die Sortierungsreihenfolge sollte dann also so aussehen:
1. alle Projekte, die nicht älter als 30 Tage sind
2. alle Projekte, die featured = 1 haben
3. alle übrigen Projekte
Nur, wie sieht aber die SQL-Abfrage aus?
Ich hab's mit der Sortierung mal so versucht:
ORDER BY (DATEDIFF(NOW(), m.date) >= 30) DESC, m.featured DESC;
..leider erfolglos.
Wie sieht der ORDER BY - Befehl richtig aus?
Vielen Dank und Gruss
Marco
Ich habe für das Contao CMS eine BE-Extension für meine Projekte geschrieben. Man kann ein Projekt erfassen und gegebenenfalls ein Projekt mit einer Checkbox "featured" bevorzugen. (in der DB featured = 0 oder 1)
Im FE werden dann alle Projekte via SQL-Abfrage und PHP aufgelistet. Sortiert nach den bevorzugten Projekten (die sind wichtig und sollen dem Besucher sofort auffallen).
Nun möchte ich die Projekte aber auch noch nach Datum sortieren (ich habe ein Feld Erstellungsdatum). Die neusten (nicht älter als 30 Tage) sollen vor den bevorzugten Projekten aufgelistet werden.
Die Sortierungsreihenfolge sollte dann also so aussehen:
1. alle Projekte, die nicht älter als 30 Tage sind
2. alle Projekte, die featured = 1 haben
3. alle übrigen Projekte
Nur, wie sieht aber die SQL-Abfrage aus?
Ich hab's mit der Sortierung mal so versucht:
ORDER BY (DATEDIFF(NOW(), m.date) >= 30) DESC, m.featured DESC;
..leider erfolglos.
Wie sieht der ORDER BY - Befehl richtig aus?
Vielen Dank und Gruss
Marco
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 197121
Url: https://administrator.de/contentid/197121
Ausgedruckt am: 26.11.2024 um 18:11 Uhr
5 Kommentare
Neuester Kommentar
Hallo Marco,
da wirst Du mit einer Sortierung nicht hinkommen sondern 2 Abfragen erstellen müssen, die Du mit "UNION ALL" hintereinander hängst.
1. Abfrage alle Projekte, die nicht älter als 30 Tage sind (Order by date desc)
UNION ALL
2. Abfrage alle Projekte, die älter als 30 Tage sind (Order by featured desc)
Gruß Jörg
da wirst Du mit einer Sortierung nicht hinkommen sondern 2 Abfragen erstellen müssen, die Du mit "UNION ALL" hintereinander hängst.
1. Abfrage alle Projekte, die nicht älter als 30 Tage sind (Order by date desc)
UNION ALL
2. Abfrage alle Projekte, die älter als 30 Tage sind (Order by featured desc)
Gruß Jörg
Hallo Marco,
das liegt am ORDER BY vor dem UNION.
Versuch mal folgendes:
Ich habe auch noch im 1. Select ">=" gesetzt sonst fehlt Dir ein TAG.
Gruß Jörg
das liegt am ORDER BY vor dem UNION.
Versuch mal folgendes:
SELECT * FROM (
SELECT m.id,
m.customer,
m.date,
m.prtsc,
f.path
FROM tl_my_customers m
INNER JOIN tl_files f ON m.prtsc = f.id
WHERE m.date >= unix_timestamp() - 2592000
ORDER BY m.date DESC)
UNION ALL
SELECT * FROM (
SELECT m.id,
m.customer,
m.date,
m.prtsc,
f.path
FROM tl_my_customers m
INNER JOIN tl_files f ON m.prtsc = f.id
WHERE m.date < unix_timestamp() - 2592000
ORDER BY m.featured DESC)
Ich habe auch noch im 1. Select ">=" gesetzt sonst fehlt Dir ein TAG.
Gruß Jörg