Page 1 sur 1

Requete avec criteres facultatifs : classement

Posté : 11 août 2013, 19:40
par StormX
Hello à tous,

Je cherche à faire une requete sql pour resoudre ce probleme :

imaginons une table : id nom est_beau (0 ou 1) est_gentil (0 ou 1) est_intelligent (0 ou 1)

J ai besoin de chercher les gens etant beaux, gentils et intelligent.

Ma question ; comment afficher d'abord les gens qui ont les 3, puis au moins 2 critéres puis 1...

Faut il multiplier les requetes? ou faire une requete sans criteres et classer dans le tableau en php ??
Ces 2 methodes me paraissant lourdes si on a bcp d entrees, avez vous une meilleure methode?

Bien à vous,

Re: Requete avec criteres facultatifs : classement

Posté : 12 août 2013, 13:31
par moogli
Salut,

As tu tenté un order by ? (order by champ1 desc, champ2 desc, champ3 desc)

@+

Re: Requete avec criteres facultatifs : classement

Posté : 27 août 2013, 10:34
par zeus
As tu tenté un order by ? (order by champ1 desc, champ2 desc, champ3 desc)
hum, je pense que ça va afficher les gens pas beaux, pas gentils et intelligents après les gens juste beaux.

Tu pourrais faire un champs calculé, mais ça va être terrible pour les performances de ta base de données (champs calculés = pas d'index possible)
SELECT
  id,
  nom,
  est_beau,
  est_gentil,
  est_intelligent,
  est_beau + est_gentil + est_intelligent AS ponderation
FROM
  maTable
ORDER BY ponderation DESC

Re: Requete avec criteres facultatifs : classement

Posté : 27 août 2013, 22:20
par moogli
ah effectivement je n'avais pas pensé à ce cas la.

j'ai pensé au decode oracle et j'ai trouvé une solution similaire, a tester http://dba.stackexchange.com/questions/ ... one-column


@+

Re: Requete avec criteres facultatifs : classement

Posté : 30 sept. 2013, 09:19
par antoine94200
en partant de ça :
id nom
est_beau (0 ou 1)
est_gentil (0 ou 1)
est_intelligent (0 ou 1)

si tu veux ceux qui ont le plus de critères à 1 ,
select matable.*,(est_beau*1+est_gentil*1+est_intelligent*1) as ordre from matable order by ordre desc
j'ai ajouté des *1 , si tu veux donner plus de poid à un critère tu augmentes le multiplicateur.