2010-04-21 14 views
1

J'écris sql pour rechercher une base de données par un certain nombre de paramètres. Comment ferais-je pour ordonner le jeu de résultats par les éléments qui correspondent le plus aux paramètres de la clause where. Par exemple:Comment est-ce que je commanderais une table par le nombre de params correspondants dans la clause where d'une instruction sql?

SELECT * 
FROM users 
WHERE username = 'eitan' 
OR email = '[email protected]' 
OR company = 'eitan' 


Username | email    | company 

1) eitan |  [email protected]  |  blah 

2) eitan |  [email protected] | eitan 

3) eitan | [email protected] |  blah 

doivent être commandés comme:

2, 3, 1.

Merci. (Ps la requête n'est pas facile, a beaucoup de jointures et beaucoup de OU est dans le WHERE)

Eitan

+0

quelle base de données ?? –

Répondre

5

Si MySQL:

SELECT * FROM users 
ORDER BY 
    (username = 'eitan') 
    + (email = '[email protected]') 
    + (company = 'eitan') 
    DESC 

Si PostgreSQL:

SELECT * FROM users 
ORDER BY 
    (username = 'eitan')::int 
    + (email = '[email protected]')::int 
    + (company = 'eitan')::int 
    DESC 

Si Sql Server:

SELECT * FROM users 
ORDER BY 
    case when username = 'eitan' then 1 else 0 end 
    + case when email = '[email protected]' then 1 else 0 end 
    + case when company = 'eitan' then 1 else 0 end 
    DESC 
+0

Je n'avais aucune idée que tu pouvais faire ça. Eh bien, quelque chose d'autre que j'ai appris aujourd'hui. –

+0

Je pense que l'OP aimerait toujours avoir la clause 'WHERE username = 'eitan' OU email = '[email protected]' OU company = 'eitan'' –

+0

ouais je sais, mais c'est le meilleur que l'on puisse faire, il a juste besoin d'ajouter cette clause WHERE. afaik, il n'y a pas encore de construction qui peut peser la véracité de WHERE clause –