2009-03-30 13 views
1

Ich wähle aus einer Datenbank von Nachrichtenartikeln, und ich würde es vorziehen, alles in einer Abfrage zu tun, wenn möglich. In den Ergebnissen brauche ich ein Sortierkriterium, das NUR für das erste Ergebnis gilt.Ändern der Sortierkriterien nach dem ersten Ergebnis

In meinem Fall muss das erste Ergebnis ein Bild haben, aber die anderen sollten sortiert werden, ohne sich um ihren Bildstatus zu kümmern.

Ist das etwas, das ich mit einer Art von Bedingungen oder Benutzervariablen in einer MySQL-Abfrage tun kann?

Antwort

4

Auch wenn Sie eine Abfrage finden, die wie eine Abfrage aussieht, wird es logisch zwei Abfragen sein. Schauen Sie sich MySQL UNION an, wenn Sie wirklich eine Abfrage machen müssen (aber es sind immer noch 2 logische Abfragen). Sie können das Bild in der ersten mit einem Limit von 1 und den Rest in der Sekunde verbinden.

+0

Wie wäre es mit einem kleinen Codebeispiel? – Martin

1

Ich denke nicht, dass es möglich ist, da es effektiv 2 Abfragen (die erste Abfrage die Tabelle sortiert werden muss, und die zweite ungeordnet), so können Sie auch 2 Abfragen mit einer LIMIT 1 in der ersten verwenden.

2

So etwas gewährleistet einen Artikel mit einem Bild auf der Oberseite.

SELECT 
    id, 
    title, 
    newsdate, 
    article 
FROM 
    news 
ORDER BY 
    CASE WHEN HasImage = 'Y' THEN 0 ELSE 1 END, 
    newsdate DESC 

Es sei denn, Sie definieren "das erste Ergebnis" näher, natürlich. Diese Abfrage bevorzugt Artikel mit Bildern, Artikel ohne werden am Ende angezeigt.

Eine andere Variante (dank le dorfier, der seine Antwort aus irgendeinem Grund gelöscht) sein würde:

SELECT 
    id, 
    title, 
    newsdate, 
    article 
FROM 
    news 
ORDER BY 
    CASE WHEN id = (
    SELECT MIN(id) FROM news WHERE HasImage = 'Y' 
) THEN 0 ELSE 1 END, 
    newsdate DESC 

Dies sortiert die früheste (unter der Annahme, MIN (id) bedeutet „früheste“) Artikel mit einem Bild Zum Seitenanfang.

+0

Das sortiert die ganze Liste, nicht nur das erste Ergebnis. – ceejayoz

+0

Wie definierst du "sortieren"? – Tomalak

+0

Wie in der ursprünglichen Frage angegeben, möchte ich * nicht * die gesamte Liste der Artikel nach ihrem Bildstatus sortieren. Ich möchte, dass der * erste * Artikel mit einem Bild eins ist, aber ich möchte, dass der Bildstatus * für den zweiten Artikel (und alle folgenden) ignoriert wird - er sollte überhaupt nicht berücksichtigt werden. – ceejayoz

Verwandte Themen