SELECT dans SELECT ?

Résolu
Sinistrus Messages postés 1010 Date d'inscription   Statut Membre Dernière intervention   -  
jee pee Messages postés 41504 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour à tous !

Je suis dans un petit soucis de compréhension...

Je suis en train de faire un jeu en ligne et les gagnants seront classés en 2 catégories :
Celui qui trouve la Lettre1, Lettre2, Lettre3,Lettre4, Lettre5, Lettre6 et Mot7 gagne le premier lot
Et celui qui trouve soit le Mot7 ou les Lettres(6) gagne le second lot.

Sauf que dans mon second tableau, ceux qui ont trouvés les deux groupes de mots s'affichent... comment les retirer et garder soit ceux qui ont trouvé les Lettre(6), soit ceux qui ont trouvés le Mot7 ?

<table width="100%" border="0" align="center" cellpadding="0" cellspacing="0">
    <thead>
      <tr>
        <td align="center" style="cursor:s-resize">Nom et Prénoms</td>
      </tr>
      </thead>
    <tbody>
<?php $MyPDO = $pdo->query("SELECT * FROM table WHERE Pseudo<>'' AND Lettre1='P' AND Lettre2='A' AND Lettre3='Q' AND Lettre4='U' AND Lettre5='E' AND Lettre6='T' OR Lettre7='BONJOUR' ORDER BY NumId ASC LIMIT 20"); while($data = $MyPDO->fetch(PDO::FETCH_ASSOC)){ ?>
        <tr>
<td align="left" valign="middle">
<?php echo nl2br($data["Pseudo"]); ?> - 

[<?php if($data["Lettre1"]=="P" || $data["Lettre2"]=="A" || $data["Lettre3"]=="Q" || $data["Lettre4"]=="U" || $data["Lettre5"]=="E" || $data["Lettre6"]=="T" || $data["Lettre7"] <> "BONJOUR") {echo "PAQUET";} ?>
] - 
(<?php if($data["Lettre1"]<>"P" || $data["Lettre2"]<>"A" || $data["Lettre3"]<>"Q" || $data["Lettre4"]<>"U" || $data["Lettre5"]<>"E" || $data["Lettre6"]<>"T" || $data["Lettre7"] == "BONJOUR") {echo "BONJOUR";} ?>
)

          </td>
        </tr>
      <?php ;} ?>
      </tbody>
</table>



1 réponse

jee pee Messages postés 41504 Date d'inscription   Statut Modérateur Dernière intervention   9 712
 
Salut,

D'abord mettre des parenthèses et utiliser XOR qui équivaut à (a AND (NOT b)) OR ((NOT a) and b) :

SELECT * FROM table WHERE Pseudo<>'' AND ((Lettre1='P' AND Lettre2='A' AND Lettre3='Q' AND Lettre4='U' AND Lettre5='E' AND Lettre6='T') XOR Lettre7='BONJOUR') ORDER BY NumId ASC LIMIT 20 
  • j'ignore si les parenthèses dans un select d'une chaine php causent soucis


cdlt
1
Sinistrus Messages postés 1010 Date d'inscription   Statut Membre Dernière intervention   17
 
XOR ?? Oula, merci jee pee, je ne savais même pas que ça existait :s
Oui oui, ça fonctionne en tout ça avec les parenthèses ! Merci beaucoup !
0
jee pee Messages postés 41504 Date d'inscription   Statut Modérateur Dernière intervention   9 712 > Sinistrus Messages postés 1010 Date d'inscription   Statut Membre Dernière intervention  
 
le XOR est un OU EXCLUSIF

a OR b
est valable si a, si b et aussi si a ET b : c'était ton soucis

alors que
a XOR b
est valable si a, si b mais pas si a ET b
0