Comparaison de données entre 2 tables

Messages postés
984
Date d'inscription
mercredi 12 décembre 2007
Statut
Membre
Dernière intervention
25 septembre 2019
-
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
Afficher la suite 

3 réponses

Messages postés
26504
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
15 octobre 2019
1826
0
Merci
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 ?
Commenter la réponse de jordane45
Messages postés
984
Date d'inscription
mercredi 12 décembre 2007
Statut
Membre
Dernière intervention
25 septembre 2019
13
0
Merci
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"
Sinistrus
Messages postés
984
Date d'inscription
mercredi 12 décembre 2007
Statut
Membre
Dernière intervention
25 septembre 2019
13 -
PS: L'ordre est généralement pas identique comme dans mon exemple.
L'utilisateur ne fera jamais cet ordre.
Sinistrus
Messages postés
984
Date d'inscription
mercredi 12 décembre 2007
Statut
Membre
Dernière intervention
25 septembre 2019
13 -
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
)
Commenter la réponse de Sinistrus
Messages postés
26504
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
15 octobre 2019
1826
0
Merci
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




Commenter la réponse de jordane45