2010-08-16 9 views
5

sto selezionando i dati da una tabella in cui una delle 3 colonne corrisponde una determinata stringa di ricerca partner:Ordina i risultati per colonna dinamicamente a seconda di dove è stato trovato

SELECT * 
FROM CARS 
WHERE MODEL LIKE searchString 
OR MANUFACTURER LIKE searchString 
OR DESCRIPTION LIKE searchString 

Ma ho bisogno di ordinare i risultati a seconda dove è stata trovata la partita, in base alla ponderazione di una colonna. Cioè se la corrispondenza è stata trovata nella colonna MODELLO, la riga dovrebbe apparire più in alto nei risultati rispetto a quando la corrispondenza è stata trovata nella colonna COSTRUTTORE. Con la ponderazione in 1-MODELLO 2-PRODUTTORE 3-DESCRIZIONE.

Tutti gli aiuti sono stati molto apprezzati, grazie!

risposta

4

di Oracle Full Text Search (FTS) functionaltiy - Oracle Text-- sarebbe sia più veloce e fornire un punteggio sulla base di rango è un algoritmo ...

SELECT c.*, 
      CASE 
       WHEN c.model LIKE searchstring THEN 1 
       WHEN c.manufacturer LIKE searchstring THEN 2 
       WHEN c.description LIKE searchstring THEN 3 
      END AS match_rank 
    FROM CARS c 
    WHERE c.model LIKE searchstring 
     OR c.manufacturer LIKE searchstring 
     OR c.description LIKE searchstring 
ORDER BY match_rank 

Ma non accennate come gestire la classifica se altre due colonne corrispondono ...

+0

la classifica dovrebbe fermarsi una volta trovata una corrispondenza. È così semplice come aggiungere una "FINE" alla fine di ogni istruzione "WHEN"? – essembee

+0

Appena realizzato che una volta che una condizione è risultata essere vera, la dichiarazione del caso restituirà il risultato e non valuterà ulteriormente le condizioni. Quindi è perfetto, evviva! – essembee

+0

buona soluzione, ma verifica le prestazioni su tabelle di grandi dimensioni .. se restituire tutto allora non dovrebbe fare molta differenza, solo il costo dell'ordinamento. Ma se si restituisce un sottoinsieme TOP (x), allora l'intera tabella deve essere prima ordinata per corrispondenza. Controlla il piano di esecuzione adatto alle tue esigenze .. –

Problemi correlati