SELECT dans SELECT ?

Résolu/Fermé
Sinistrus Messages postés 1017 Date d'inscription mercredi 12 décembre 2007 Statut Membre Dernière intervention 6 juin 2023 - 4 avril 2017 à 17:27
jee pee Messages postés 39582 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 17 avril 2024 - 4 avril 2017 à 19:27
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 39582 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 17 avril 2024 9 224
4 avril 2017 à 17:51
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 1017 Date d'inscription mercredi 12 décembre 2007 Statut Membre Dernière intervention 6 juin 2023 17
4 avril 2017 à 17:57
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 39582 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 17 avril 2024 9 224 > Sinistrus Messages postés 1017 Date d'inscription mercredi 12 décembre 2007 Statut Membre Dernière intervention 6 juin 2023
Modifié le 4 avril 2017 à 19:28
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