Comparaison de données entre 2 tables

Fermé
Sinistrus Messages postés 1010 Date d'inscription mercredi 12 décembre 2007 Statut Membre Dernière intervention 6 juin 2023 - Modifié le 12 juin 2019 à 21:53
jordane45 Messages postés 38274 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 8 novembre 2024 - 13 juin 2019 à 12:22
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
A voir également:

3 réponses

jordane45 Messages postés 38274 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 8 novembre 2024 4 696
13 juin 2019 à 00:04
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
Sinistrus Messages postés 1010 Date d'inscription mercredi 12 décembre 2007 Statut Membre Dernière intervention 6 juin 2023 17
13 juin 2019 à 00:13
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
Sinistrus Messages postés 1010 Date d'inscription mercredi 12 décembre 2007 Statut Membre Dernière intervention 6 juin 2023 17
13 juin 2019 à 00:15
PS: L'ordre est généralement pas identique comme dans mon exemple.
L'utilisateur ne fera jamais cet ordre.
0
Sinistrus Messages postés 1010 Date d'inscription mercredi 12 décembre 2007 Statut Membre Dernière intervention 6 juin 2023 17
13 juin 2019 à 00:20
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
jordane45 Messages postés 38274 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 8 novembre 2024 4 696
13 juin 2019 à 12:22
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