2017-02-20 2 views
0

Ich möchte Daten aus einer Tabelle mit mehreren Bedingungen herausfiltern, daher verwende ich die folgende Abfrage.Sortierung basierend auf der Anzahl der Bedingungen

Das funktioniert wie erwartet, aber jetzt muss ich das Ergebnis basierend auf der Anzahl der Bedingungen sortieren, die durch die Zeile erfüllt werden. Zum Beispiel, wenn eine Zeile alle oder Anweisungen erfüllt, dann sollte es an der Spitze sein und einzelne Bedingung sollte am Ende sein. Wie kann ich das erreichen?

Was habe ich versucht:

WHERE (LOWER(`content`) LIKE LOWER('%{$keywords}%') 
OR LOWER(`fname`) = LOWER('{$keywords}') 
OR LOWER(`title`) = LOWER('{$keywords}')) AND approval=1 
ORDER BY 
    WHEN LOWER(`content`) LIKE LOWER('%{$keywords}%') AND LOWER(`fname`) = LOWER('{$location}') AND LOWER(`title`) = LOWER('{$keywords}') THEN 1 
    WHEN (LOWER(`content`) LIKE LOWER('%{$keywords}%') AND LOWER(`fname`) = LOWER('{$keywords}')) 
    OR (LOWER(`post_author_fname`) = LOWER('{$keywords}') AND LOWER(`title`) = LOWER('{$keywords}')) 
    OR (LOWER(`content`) LIKE LOWER('%{$keywords}%') AND LOWER(`title`) = LOWER('{$keywords}')) THEN 2 
    ELSE 3 END 
ASC; 

Gibt es eine einfache Alternative?

Antwort

1

Jede Bedingung auswertet zu wahr/falsch, was 1/0 in MySQL entspricht. Sie verwenden die Summe der Bedingungen, um nach der Anzahl der übereinstimmenden Bedingungen zu sortieren.

+0

arbeiten ist einfach :) –

1

Ich glaube, Sie Ihre Bedingungen als eine weitere Säule und um nach dieser Spalte summieren kann, da wie und = 0 zurück und 1

+0

Vielen Dank für Ihre wertvollen Informationen :) –

1

Sie so etwas wie dieses verwenden können:

SELECT * 
    FROM `usersposts` 
WHERE 
    (LOWER(`content`) LIKE LOWER('%{$keywords}%') 
OR 
    LOWER(`fname`) = LOWER('{$keywords}') 
OR 
    LOWER(`title`) = LOWER('{$keywords}')) 
AND 
    approval=1 
ORDER BY (
    IF((LOWER(`content`) LIKE LOWER('%{$keywords}%') ,1,0) 
    + IF(LOWER(`fname`) = LOWER('{$keywords}') ,1,0) 
    + IF(LOWER(`title`) = LOWER('{$keywords}')) ,1,0) 
    ) DESC 
; 
+0

Dank sieht es dieses –

Verwandte Themen