Page 1 sur 1

Requête sql un peu complexe (pour moi)

Posté : 23 avr. 2006, 18:13
par Dam__42
Bonjour à tous,

Je suis bloqué sur une requête sql que je n'arrive pas à créer :/
Voici le problème :

J'ai une table avec plusieurs champs qui ont pour valeur 0 ou 1
Je cherche à sélectionner tous les enregistrements qui possède AU MOINS deux champs égale à 1

Cela est il possible avec une requête sql ?

Merci d'avance !!! :D

Posté : 23 avr. 2006, 18:31
par alexbad
Salut,

Je ne crois pas que ce soit possible directement en SQL, mais tu peux sans doute faire une deuxième sélection en PHP. Mais tu pourrais élaborer un peu et décrire ton script plus en détails (structure de la table, quelques codes utiles) car selon moi il y a bien une autre solution.

Posté : 24 avr. 2006, 00:27
par Cyrano
bien sur que si c'est possible : une clause WHERE. Supposons que tu aies trois champs, champ_x, champ_y et champ_z et tu veux trouver les lignes ou moins deux des trois champs aient la valeur 1 :

Code : Tout sélectionner

... WHERE (champ_x = 1 AND champ_y = 1) OR (champ_x = 1 AND champ_z = 1) OR (champ_y = 1 AND champ_z = 1);
Tout simplement. Mais attention à ne pas oublier les parenthèses qui regroupent les paides de clauses avec "AND".

Mais ... si une des lignes a les trois champs avec 1, elle sortira trois fois. Tu peux donc affiner :

Code : Tout sélectionner

... WHERE (champ_x = 1 AND champ_y = 1 AND champ_z = 1) OR (champ_x = 1 AND champ_y = 1 AND champ_z = 0) OR (champ_x = 1 AND champ_y = 0 AND champ_z = 1) OR (champ_x = 0 AND champ_y = 1 AND champ_z = 1);

Posté : 24 avr. 2006, 09:29
par Ripat
... ou, si on a la flemme d'écrire toutes les combinaisons possibles de colonnes:

Code : Tout sélectionner

SELECT *, (col1 + col2 + col3) as checksum FROM `ta_table` HAVING checksum >= 2
:wink:

Edit:

Ou, plus propre, pour ne pas encombrer le recordset de colonnes inutiles:

Code : Tout sélectionner

SELECT * FROM `ta_table` HAVING (col1 + col2 + col3) >= 2

Posté : 24 avr. 2006, 10:50
par Cyrano
Brillant Ripat :pouce: