Requete avec criteres facultatifs : classement

StormX
Invité n'ayant pas de compte PHPfrance

11 août 2013, 19:40

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,

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

12 août 2013, 13:31

Salut,

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

@+
Il en faut peu pour être heureux ......

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

27 août 2013, 10:34

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
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

27 août 2013, 22:20

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


@+
Il en faut peu pour être heureux ......

antoine94200
Invité n'ayant pas de compte PHPfrance

30 sept. 2013, 09:19

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.