Comparaison de données entre 2 tables

Sinistrus Messages postés 1010 Date d'inscription   Statut Membre Dernière intervention   -  
jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour à tous !

J'ai 2 tables dont je souhaiterais comparer les données.
Exemple 1 : un message "OK" s'affiche, signifiant que l'utilisateur a trouvé les bons chiffres :
La première table contient des données tels que tb_jeu_can_Q.Tour_01 = 01 - 02 - 03 - 04 - 05 - 06
L'utilisateur quand à lui a ajouté des données tels que : tb_jeu_can_R.Tour_01 : 05 - 02 - 04 - 06 - 01 - 03

Exemple 2 : un message "NO" s'affiche, signifiant que l'utilisateur n'a pas trouvé les bons chiffres :
La première table contient des données tels que tb_jeu_can_Q.Tour_01 = 01 - 02 - 03 - 04 - 05 - 06
L'utilisateur quand à lui a ajouté des données tels que : tb_jeu_can_R.Tour_01 : 05 - 02 - 08 - 06 - 01 - 03

J'ai essayé cette requête et plein d'autres mais le résultat n'est pas satisfaisant...
/*
Si l'utilisateur trouve 5 sur 6, au lieu d'afficher "NON il affiche OKOKOKOKOK (5 OK)
L'utilisateur doit impérativement trouver les 6 valeurs (quelque soit l'ordre) pour afficher 1 seul "OK"
*/
$Stat_Z = $pdo->query("
SELECT Q.Tour_01, R.Tour_01, 
IF  (R.Tour_01 = Q.Tour_01, 'OK', 'NO') AS result 
FROM  tb_jeu_can_Q AS Q
INNER  JOIN tb_jeu_can_R AS R ON Q.Tour_01 = R.Tour_01
WHERE  Q.Tour_01 IS NOT NULL
AND  R.Pseudo='ADMIN'");

while($data_Z = $Stat_Z->fetch(PDO::FETCH_ASSOC)){
 echo $data_Z["result"];
}


J'ai aussi essayé de comparer les $variables PHP mais là non plus ce n'est pas satisfaisant :
/*
Ce code m'affiche "OK" même si le résultat est différent
Comme si la valeur récupérée n'est pas bien comparée...

Si par contre je met "Bonjour" et "bonjour" à la place des $data[""]
là il affiche "NO" ou "YES" dans e cas de "Bonjour" et "Bonjour"
*/
<?php
$Stat_Q = $pdo->query("
SELECT Tour_01 
FROM tb_jeu_can_Q 
WHERE Tour_01 IS NOT NULL 
ORDER BY Tour_01
");
while($data_Q = $Stat_Q->fetch(PDO::FETCH_ASSOC)){
$Tour_Q = $data_Q["Tour_01"];
}

$Stat_R = $pdo->query("
SELECT Tour_01 
FROM tb_jeu_can_R 
WHERE Pseudo = '".$_SESSION_PSEUDO."' 
AND Tour_01 IS NOT NULL 
ORDER BY Tour_01
");
while($data_R = $Stat_R->fetch(PDO::FETCH_ASSOC)){
$Tour_R = $data_R["Tour_01"];
}

if (strcmp($Tour_R, $Tour_Q) !== 0) {
    echo "NO";
 } else {
 echo "OK";
}
?>


Pouvez-vous m'aider svp ?

Merci d'avance

Configuration: Windows / Chrome 74.0.3729.169

3 réponses

  1. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 832
     
    Bonjour il nous faudrait connaître la structure exacte de ta table et disposer également d'un jeu de données pour pouvoir tester .
    Est-ce que l'ordre des valeurs est également la même dans les deux tables ?
    0
  2. Sinistrus Messages postés 1010 Date d'inscription   Statut Membre Dernière intervention   17
     
    Merci Jordane,

    Voici les 2 tables avec les données.
    La différence des 16 enregistrements est CIV et VIC
    CREATE TABLE `tb_jeu_can_Q` (
      `NumId` int(11) NOT NULL AUTO_INCREMENT,
      `Image` varchar(3) DEFAULT NULL,
      `Pays` varchar(255) DEFAULT NULL,
      `Tour_01` varchar(3) DEFAULT NULL,
      `Tour_02` varchar(3) DEFAULT NULL,
      `Tour_03` varchar(3) DEFAULT NULL,
      `Tour_04` varchar(3) DEFAULT NULL,
      `Tour_05` varchar(3) DEFAULT NULL,
      `Tour_05_scr` varchar(2) DEFAULT NULL,
      `Tour_06` varchar(3) DEFAULT NULL,
      `Tour_06_scr` varchar(2) DEFAULT NULL,
      `Slct_01` varchar(3) DEFAULT NULL,
      `Slct_01_scr` varchar(2) DEFAULT NULL,
      `Slct_02` varchar(3) DEFAULT NULL,
      `Slct_02_scr` varchar(2) DEFAULT NULL,
      `Slct_03` varchar(3) DEFAULT NULL,
      `Slct_03_scr` varchar(2) DEFAULT NULL,
      `Mtch_01` varchar(3) DEFAULT NULL,
      `Mtch_01_scr` varchar(2) DEFAULT NULL,
      `Mtch_02` varchar(3) DEFAULT NULL,
      `Mtch_02_scr` varchar(2) DEFAULT NULL,
      `Mtch_03` varchar(3) DEFAULT NULL,
      `Mtch_03_scr` varchar(2) DEFAULT NULL,
      `Mtch_04` varchar(3) DEFAULT NULL,
      `Mtch_04_scr` varchar(2) DEFAULT NULL,
      `Mtch_05` varchar(3) DEFAULT NULL,
      `Mtch_05_scr` varchar(2) DEFAULT NULL,
      PRIMARY KEY (`NumId`)
    ) ENGINE=MyISAM AUTO_INCREMENT=25 DEFAULT CHARSET=utf8;
    
    INSERT INTO `tb_jeu_can_Q` VALUES (1,'ZAF','Afrique du sud',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'ZAF','8',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(2,'DZA','Algérie',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(3,'AGO','Angola',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(4,'BEN','Bénin','BEN',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(5,'BDI','Burundi','BDI',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(6,'CMR','Cameroun','CMR','CMR','CMR',NULL,'CMR','9',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(7,'CIV','Côte d’Ivoire','CIV','CIV','CIV','CIV',NULL,NULL,'CIV','9','CIV','9','CIV','2','CIV','9','CIV','9','CIV','9','CIV','9','CIV','9','CIV','9'),(8,'EGY','Egypte','EGY','EGY','EGY','EGY',NULL,NULL,'EGY','8',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EGY','8','EGY','8'),(9,'GHA','Ghana','GHA','GHA','GHA',NULL,'GHA','8',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GHA','8',NULL,NULL,NULL,NULL),(10,'GIN','Guinée','GIN','GIN',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(11,'GNB','Guinée-Bissau','GNB','GNB',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(12,'KEN','Kenya','KEN','KEN',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'KEN','8',NULL,NULL,NULL,NULL,NULL,NULL),(13,'MDG','Madagascar','MDG','MDG',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(14,'MLI','Mali','MLI',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(15,'MAR','Maroc','MAR',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'MAR','2',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(16,'MRT','Mauritanie','MRT',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(17,'NAM','Namibie','NAM',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'NAM','8',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(18,'NGA','Nigéria','NGA',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(19,'UGA','Ouganda','UGA',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'UGA','8',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(20,'COG','R.D. Congo',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(21,'SEN','Sénégal',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(22,'TZA','Tanzanie',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(23,'TUN','Tunisie',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),(24,'ZWE','Zimbabwe',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
    
    
    
    CREATE TABLE `tb_jeu_can_R` (
      `NumId` int(11) NOT NULL AUTO_INCREMENT,
      `Pseudo` varchar(255) DEFAULT NULL,
      `Tour_01` varchar(3) DEFAULT '0',
      `Part_01` enum('0','1') DEFAULT '0',
      `Tour_02` varchar(3) DEFAULT '0',
      `Part_02` enum('0','1') DEFAULT '0',
      `Tour_03` varchar(3) DEFAULT '0',
      `Part_03` enum('0','1') DEFAULT '0',
      `Tour_04` varchar(3) DEFAULT '0',
      `Part_04` enum('0','1') DEFAULT '0',
      `Tour_05` varchar(3) DEFAULT '0',
      `Part_05` enum('0','1') DEFAULT '0',
      `Slct_01` varchar(3) DEFAULT '0',
      `Part_06` enum('0','1') DEFAULT '0',
      `Slct_02` varchar(3) DEFAULT '0',
      `Part_07` enum('0','1') DEFAULT '0',
      `Slct_03` varchar(3) DEFAULT '0',
      `Part_08` enum('0','1') DEFAULT '0',
      `Mtch_01` varchar(3) DEFAULT '0',
      `Part_09` enum('0','1') DEFAULT '0',
      `Mtch_02` varchar(3) DEFAULT '0',
      `Part_10` enum('0','1') DEFAULT '0',
      `Mtch_03` varchar(3) DEFAULT '0',
      `Part_11` enum('0','1') DEFAULT '0',
      `Mtch_04` varchar(3) DEFAULT '0',
      `Part_12` enum('0','1') DEFAULT '0',
      `Mtch_05` varchar(3) DEFAULT '0',
      `Part_13` enum('0','1') DEFAULT '0',
      PRIMARY KEY (`NumId`)
    ) ENGINE=MyISAM AUTO_INCREMENT=143 DEFAULT CHARSET=utf8;
    
    INSERT INTO `tb_jeu_can_R` VALUES (134,'ADMIN','BEN','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0'),(133,'ADMIN','BDI','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0'),(132,'ADMIN','CMR','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0'),(131,'ADMIN','CI4','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0'),(130,'ADMIN','EGY','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0'),(129,'ADMIN','GHA','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0'),(128,'ADMIN','GIN','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0'),(127,'ADMIN','GNB','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0'),(135,'ADMIN','KEN','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0'),(136,'ADMIN','MDG','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0'),(137,'ADMIN','MLI','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0'),(138,'ADMIN','MAR','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0'),(139,'ADMIN','MRT','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0'),(140,'ADMIN','NAM','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0'),(141,'ADMIN','NGA','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0'),(142,'ADMIN','UGA','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0');
    

    Voici les données a comparer
    BEN	BEN
    BDI BDI
    CMR CMR
    CIV VIC /*Voici l'intrus qui fera que "NON" sera affiché*/
    EGY EGY
    GHA GHA
    GIN GIN
    GNB GNB
    KEN KEN
    MDG MDG
    MLI MLI
    MAR MAR
    MRT MRT
    NAM NAM
    NGA NGA
    UGA UGA
    Seulement dans le cas où 16/16 "OK" apparaît.
    Puisqu'il n'y a que 15/16 alors c'est "NON"
    0
    1. Sinistrus Messages postés 1010 Date d'inscription   Statut Membre Dernière intervention   17
       
      PS: L'ordre est généralement pas identique comme dans mon exemple.
      L'utilisateur ne fera jamais cet ordre.
      0
    2. Sinistrus Messages postés 1010 Date d'inscription   Statut Membre Dernière intervention   17
       
      J'ai testé ce code aussi :
      <?php
      $Stat_Z = $pdo->query("
      SELECT Q.Tour_01 as Q_Tour_01
                   , R.Tour_01 as R_Tour_01
                   , IF  (R.Tour_01 = Q.Tour_01, 'OK','NO') AS result 
      FROM  tb_jeu_can_Q AS Q
      LEFT  JOIN tb_jeu_can_R AS R ON Q.Tour_01 = R.Tour_01
      WHERE  Q.Tour_01 IS NOT NULL
      AND  R.Pseudo='".$_SESSION_PSEUDO."'");
      
      
      $all_OK=true;
      while($all_OK && $data_Z = $Stat_Z->fetch(PDO::FETCH_ASSOC)){
          $all_OK = ('OK'===$data_Z['result']);
          echo '<pre>',print_r($data_Z,true), '</pre><br>',PHP_EOL;
      }
      
      if( $all_OK )
      {
        echo 'OK';
      }
      else
      {
       echo 'NO';
      }
      ?>

      Voici le résultat (qui omet CIV et VIC donc affiche 15/16 et met "OK"...
      Array
      (
          [Q_Tour_01] => BEN
          [R_Tour_01] => BEN
          [result] => OK
      )
      
      Array
      (
          [Q_Tour_01] => BDI
          [R_Tour_01] => BDI
          [result] => OK
      )
      
      Array
      (
          [Q_Tour_01] => CMR
          [R_Tour_01] => CMR
          [result] => OK
      )
      
      Array
      (
          [Q_Tour_01] => EGY
          [R_Tour_01] => EGY
          [result] => OK
      )
      
      Array
      (
          [Q_Tour_01] => GHA
          [R_Tour_01] => GHA
          [result] => OK
      )
      
      Array
      (
          [Q_Tour_01] => GIN
          [R_Tour_01] => GIN
          [result] => OK
      )
      
      Array
      (
          [Q_Tour_01] => GNB
          [R_Tour_01] => GNB
          [result] => OK
      )
      
      Array
      (
          [Q_Tour_01] => KEN
          [R_Tour_01] => KEN
          [result] => OK
      )
      
      Array
      (
          [Q_Tour_01] => MDG
          [R_Tour_01] => MDG
          [result] => OK
      )
      
      Array
      (
          [Q_Tour_01] => MLI
          [R_Tour_01] => MLI
          [result] => OK
      )
      
      Array
      (
          [Q_Tour_01] => MAR
          [R_Tour_01] => MAR
          [result] => OK
      )
      
      Array
      (
          [Q_Tour_01] => MRT
          [R_Tour_01] => MRT
          [result] => OK
      )
      
      Array
      (
          [Q_Tour_01] => NAM
          [R_Tour_01] => NAM
          [result] => OK
      )
      
      Array
      (
          [Q_Tour_01] => NGA
          [R_Tour_01] => NGA
          [result] => OK
      )
      
      Array
      (
          [Q_Tour_01] => UGA
          [R_Tour_01] => UGA
          [result] => OK
      )
      0
  3. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 832
     
    Arghhhh...... puréeeee....

    Je suppose ( enfin non... j'en suis même sûr....) que tu ne connais rien aux bases de données ni comment on les conçoit......
    Il faut revoir la structure de ta base.

    Il faut, à minima,
    - une table JOUEURS
    - une table JEUX
    - une table TOURS
    - une table PARTIES
    - une table MATCHS

    0