2016-05-18 5 views
-2

Ich habe Daten in PostgreSQL in gleicher sequenz folgendeSortierung der Suchergebnisse in Postgres SQL

Building Maintenance - Painting 
Paint Expense 
Painting Supplies 

Suchergebnis sollte in folgenden Reihenfolge angezeigt:

  1. exakte Treffer sollen zuerst
  2. anzuzeigen
  3. Teiltreffer vom Anfang der Textzeichenfolge
  4. Teilweise Übereinstimmungen an einer beliebigen Stelle in der Textzeichenfolge **

Wenn Benutzer Suchbegriff eingibt "Farbe" Ergebnis sein sollte -

Paint Expense 
Painting Supplies 
Building Maintenance - Painting 

Jede Hilfe wäre sehr geschätzt.

+0

Was beabsichtigte Tabellenstruktur ist? Welche Sprache verwendest du? Wie sollen Ergebnisse angezeigt werden (Webseite/App/was auch immer)? Was hast du bisher versucht? – dhke

+0

@dhke Ich benutze PHP dafür. Die Tabellenstruktur ist einfach wie die Felder id, account_number und account_name. Ich habe das Suchfeld automatisch abgeschlossen, wenn ich "Farbe" schreibe, sollte es über 3 Einträge im Feld account_name auflisten. – Abhijit

+0

Hallo, diese Frage eignet sich nicht gut für die Website, da sie kein bestimmtes Problem darstellt, das Sie mit Ihrem Code haben und das jemand anderes mit Ihrem Code haben könnte. Stattdessen liest es sich wie eine Bitte an jemanden, etwas Code für dich zu schreiben; es würde als Jobspez auf einer freiberuflichen Website funktionieren, aber Sie erwarten von jemandem, dass es Ihnen kostenlos zur Verfügung gestellt wird. – IMSoP

Antwort

0

Dies ist für SQL Server aber Sie werden diese einfach zu PostrgeSQL ändern:

DECLARE @f VARCHAR(MAX) = 'paint' 

DECLARE @t TABLE (v VARCHAR(MAX)) 
INSERT INTO @t 
VALUES ('Building Maintenance - Painting'), 
     ('Paint Expense'), 
     ('Painting Supplies') 


SELECT * , 
     CASE WHEN (v LIKE @f + ' %' 
        OR v LIKE '% ' + @f 
        OR v LIKE '% ' + @f + ' %' 
       ) THEN 1 
      WHEN v LIKE @f + '%' THEN 2 
      WHEN v LIKE '%' + @f + '%' THEN 3 
      ELSE 4 
     END AS ordering 
FROM @t 
ORDER BY ordering 

Ausgang:

v         ordering 
Paint Expense      1 
Painting Supplies     2 
Building Maintenance - Painting 3 

Die erste ist genau passend wie 'paint ...' oder '... paint' oder '... paint ...'.

Die zweite: 'paint...'.

Die dritte: '...paint...'.

Sie können dies auch in order Klausel tun direkt:

SELECT * 
FROM @t 
ORDER BY CASE WHEN (v LIKE @f + ' %' 
        OR v LIKE '% ' + @f 
        OR v LIKE '% ' + @f + ' %' 
        ) THEN 1 
       WHEN v LIKE @f + '%' THEN 2 
       WHEN v LIKE '%' + @f + '%' THEN 3 
       ELSE 4 
     END 
+0

Danke, werde es versuchen :) – Abhijit