Requête sql un peu complexe (pour moi)

Dam__42
Invité n'ayant pas de compte PHPfrance

23 avr. 2006, 18:13

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

ViPHP
ViPHP | 649 Messages

23 avr. 2006, 18:31

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.
Image

Mammouth du PHP | 19672 Messages

24 avr. 2006, 00:27

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);
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

ViPHP
ViPHP | 1380 Messages

24 avr. 2006, 09:29

... 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
Modifié en dernier par Ripat le 24 avr. 2006, 15:52, modifié 1 fois.
ripat

Mammouth du PHP | 19672 Messages

24 avr. 2006, 10:50

Brillant Ripat :pouce:
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe: