Alle Zeitungsartikel + 5 geplante

querytail

Erfahrenes Mitglied
Hallo zusammen,

habe folgende Abfrage und möchte diese erweitern und zwar so, dass zusätzlich noch genau 5 zukünftige Artikel abgerufen werden:

Code:
SELECT articles, designer, editfrom , editto FROM articlelist WHERE editfrom < NOW() and editto > NOW()

Geht sowas in MySQL?

Danke

Michael Meyer
 
OK, das ganze läuft jetzt so ab, leider aber nicht mit ORDER BY:

Code:
SELECT articles, designer, editfrom , editto FROM articlelist WHERE editfrom > NOW() LIMIT 5
UNION DISTINCT
SELECT articles, designer, editfrom , editto FROM articlelist WHERE editfrom < NOW() and editto > NOW()
 
Zuletzt bearbeitet:
Hallo zusammen,

wenn ich die erste Abfrage alleine ausführe und ORDER BY editfrom einfüge, werden mir meine gewünschten Ergebnisse aufgeführt.
Leider funktioniert das nicht mit UNION?

PHP:
Incorrect usage of UNION and ORDER BY

Normalerweise sollte es doch gehen. oder wie kann ich die erste Abfrage vorsortieren?

Danke

Michael Meyer
 
Zuletzt bearbeitet:
Setzte die einzelnen SELECT-Anweisungen in Klammern:

SQL:
(SELECT articles, designer, editfrom , editto FROM articlelist WHERE editfrom > NOW() ORDER BY editfrom LIMIT 5)
UNION
(DISTINCT SELECT articles, designer, editfrom , editto FROM articlelist WHERE editfrom < NOW() and editto > NOW())

Habe es bei mir mit einer ähnlichen Abfrage versucht und da ging es so.
 
item: Du willst die nächsten 5 auswählen. Auch wenn es 10 hat. Mit deinem SQL nimmt er irgendwelche 5 aus alle Zukünftigen. Du solltest darum ein Subquery machen, in dem du sortierst und LIMIT ausführst. Nur Klammern alleine funktionieren bei meinen Tests nicht
item: um das ganze Resultat am Schluss zu sortieren kannst du den ORDER BY einfach noch am Ende hinzufügen
item: editfrom < NOW() and editto > NOW() kannst du BETWEEN verwenden (nunja ,nicht ganz. Bei deinem werden die editfrom und editto nicht mit angerechnet. Je nachdem was du genau haben willst, ist das Eine oder das Andere nützlich)
SQL:
SELECT future5.* 
FROM (
		SELECT 
			articles, 
			designer, 
			editfrom, 
			editto 
		FROM 
			articlelist 
		WHERE editfrom > NOW()
		ORDER BY editfrom
		LIMIT 5
	) AS future5
UNION DISTINCT
SELECT 
	articles, 
	designer, 
	editfrom , 
	editto 
FROM
	articlelist
WHERE
	NOW() BETWEEN editfrom AND editto
ORDER BY editfrom
 
Zuletzt bearbeitet von einem Moderator:
So scheint es auch nicht zu gehen (Error). Werde noch ein bischen suchen. Danke trotzdem.

@yaslaw: Hatte nicht mehr aktualisiert. Danke, das werde ich gleich mal versuchen...******
 
Zuletzt bearbeitet:
Aber wie beschrieben. Wenn mehrere Datensätze gleich weit von NOW() entfernt sind, dann kommen diese auch. Es kann also mehr als ein Datensatz zurückgegeben werden.
 
Zurück