IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Comparer deux tables et afficher resultats via php [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Juillet 2010
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Haute Saône (Franche Comté)

    Informations professionnelles :
    Activité : Technicien Help Desk
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2010
    Messages : 9
    Points : 6
    Points
    6
    Par défaut Comparer deux tables et afficher resultats via php
    Bonjour

    J'amerais comparer deux tables et avoir un retour resultat des differences via un fichier php.

    Je precise donc

    J'ai une table A et une table B
    et je souhaiterais comparer le champ 1 de la Table A au champ 2 de la table B
    Et ensuite avoir un affichage de la liste des valeurs du champ 1 quand cette valeur n'est pas presente dans la table B


    J'ai la requete SQLmais je souhaiterais la traduire en php

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT champ 1
    FROM Table A
    WHERE champ 1 NOT
    IN (
     
    SELECT champ 2
    FROM Table B
    )

    Cdlt

  2. #2
    Expert éminent
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 093
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 093
    Points : 6 754
    Points
    6 754
    Par défaut
    Je pense que tu cherches array_diff.
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Juillet 2010
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Haute Saône (Franche Comté)

    Informations professionnelles :
    Activité : Technicien Help Desk
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2010
    Messages : 9
    Points : 6
    Points
    6
    Par défaut
    peut etre je viens de faire des essais je ne vois pas trop comment l'utiliser en php cette fonction.
    Surtout que je ne connais la les valeurs a l'avance.

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Pourquoi tu veux le faire en PHP plutôt qu'en SQL ?

    Sinon la réponse est bien array_diff : il faut recolter les résultat de chaque table dans un array PHP et les comparer avec la fonction.
    Mais ce n'est pas du tout optimisé.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Expert éminent
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 093
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 093
    Points : 6 754
    Points
    6 754
    Par défaut
    Il y a quoi dans tes tables A et B ? Quand tu fais un print_r par exemple.
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Juillet 2010
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Haute Saône (Franche Comté)

    Informations professionnelles :
    Activité : Technicien Help Desk
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2010
    Messages : 9
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par sabotage Voir le message
    Pourquoi tu veux le faire en PHP plutôt qu'en SQL ?
    Je ne veut pas le faire en sql parce que je ne serai pas le seul a acceder a ces infos et je ne veut pas laisser l'acces a phpmyadmin a d'autres que moi.

    Citation Envoyé par Watilin Voir le message
    Il y a quoi dans tes tables A et B ? Quand tu fais un print_r par exemple.
    dans l'ordre resultat de la comparaison
    puis tableau a et tableau b
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Array ( )
    Array ( [a] => Array ( [0] => Soleil / Vegetal Manga Shoten www.soleil-lesite.com [editeur] => Soleil / Vegetal Manga Shoten www.soleil-lesite.com ) )
    Array ( [b] => Array ( [0] => 12 Bis [titre] => 12 Bis ) )

  7. #7
    Membre habitué
    Homme Profil pro
    Collégien
    Inscrit en
    Septembre 2014
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 21
    Localisation : Nouvelle-Zélande

    Informations professionnelles :
    Activité : Collégien

    Informations forums :
    Inscription : Septembre 2014
    Messages : 65
    Points : 158
    Points
    158
    Par défaut
    Tu peux faire deux select distinct, et tu fais tes comparaisons en parcourant les deux tableaux.
    Si les deux tableaux ont la même taille, une seule boucle suffit, si tes deux tableaux ont des tailles différentes, boucles imbriquées pour comparer case par case.

  8. #8
    Membre expert
    Avatar de Spartacusply
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2011
    Messages
    1 723
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2011
    Messages : 1 723
    Points : 3 274
    Points
    3 274
    Par défaut
    La logique de "Je ne veut pas le faire en sql parce que je ne serai pas le seul a acceder a ces infos" ne tient pas du tout la route. Je comprends pas, si tu exécutes ta requête avec du php et que toi seul à le code source, personne ne pourra exécuter la requête s'il n'a pas accès au code source.

    Faut vraiment le faire en SQL là, c'est indéfiniment plus rapide que le faire en PHP ! (
    Un message utile vous a aidé ? N'oubliez pas le

    www.simplifions.fr - Simplifier vos comptes entre amis !

  9. #9
    Expert éminent
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 093
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 093
    Points : 6 754
    Points
    6 754
    Par défaut
    Je suis d'accord. Envisage une jointure.
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

  10. #10
    Futur Membre du Club
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Juillet 2010
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Haute Saône (Franche Comté)

    Informations professionnelles :
    Activité : Technicien Help Desk
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2010
    Messages : 9
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par Spartacusply Voir le message
    La logique de "Je ne veut pas le faire en sql parce que je ne serai pas le seul a acceder a ces infos" ne tient pas du tout la route. Je comprends pas, si tu exécutes ta requête avec du php et que toi seul à le code source, personne ne pourra exécuter la requête s'il n'a pas accès au code source.

    Faut vraiment le faire en SQL là, c'est indéfiniment plus rapide que le faire en PHP ! (
    Ben justement le code sera inclu dans une page accessible, elle, aux autres personnes qui auront besoin de voir cela.

  11. #11
    Membre expert
    Avatar de Spartacusply
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2011
    Messages
    1 723
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2011
    Messages : 1 723
    Points : 3 274
    Points
    3 274
    Par défaut
    Pas le code directement le rendu du code non ?
    Un message utile vous a aidé ? N'oubliez pas le

    www.simplifions.fr - Simplifier vos comptes entre amis !

  12. #12
    Expert éminent
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 093
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 093
    Points : 6 754
    Points
    6 754
    Par défaut
    Si tu veux montrer ton code à des fins didactiques, array_diff est toujours une bonne solution, mais le format actuel de tes tableaux n'est pas bon.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Array (
       [a] => Array (
          [0] => Soleil / Vegetal Manga Shoten www.soleil-lesite.com
          [editeur] => Soleil / Vegetal Manga Shoten www.soleil-lesite.com
       )
    )
     
    Array (
       [b] => Array (
          [0] => 12 Bis
          [titre] => 12 Bis
       )
    )
    Il faut les préparer. D'abord, « retire » le premier niveau :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    /* $a = ...;
       print_r($a); */
    Array (
       [0] => Soleil / Vegetal Manga Shoten www.soleil-lesite.com
       [editeur] => Soleil / Vegetal Manga Shoten www.soleil-lesite.com
    )
     
    /* $b = ...;
       print_r($b); */
    Array (
       [0] => 12 Bis
       [titre] => 12 Bis
    )
    Ensuite, retire les index numériques. Puisque ça vient d'une BDD tu as le choix dans ta fonction d'extraction entre mode numérique, mode associatif ou les deux. Actuellement c'est les deux ; choisis associatif.
    Je te donne le lien vers la doc de l'API dépréciée mysql_*, car il y a un avertissement qui pointe vers les fonctions équivalentes des autres API mysqli_* et PDO. Dans tous les cas la valeur par défaut ressemble à MACHIN_BOTH et tu dois la remplacer par MACHIN_ASSOC.

    Le résultat devrait ressembler à ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    /* print_r($a); */
    Array (
       [editeur] => Soleil / Vegetal Manga Shoten www.soleil-lesite.com
    )
     
    /* print_r($b); */
    Array (
       [titre] => 12 Bis
    )
    Et le diff donnera ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Array (
        [editeur] => Soleil / Vegetal Manga Shoten www.soleil-lesite.com
    )
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

  13. #13
    Futur Membre du Club
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Juillet 2010
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Haute Saône (Franche Comté)

    Informations professionnelles :
    Activité : Technicien Help Desk
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2010
    Messages : 9
    Points : 6
    Points
    6
    Par défaut
    Voila mon code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    $a = mysql_query("select editeur from manga");
    $a = mysql_fetch_array($a);
    $b = mysql_query("select titre from editeur");
    $b = mysql_fetch_array($b);
    $array1 = array("a" => $a);
    $array2 = array("b" => $b);
     
    $result = array_diff($array1, $array2);
     
    print_r($result);
    echo "<br />";
    print_r($array1);
    echo "<br />";
    print_r($array2);

  14. #14
    Expert éminent
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 093
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 093
    Points : 6 754
    Points
    6 754
    Par défaut
    Je ne te demandais pas de nous montrer ton code, je disais simplement « dans la mesure où tu souhaiterais montrer ton code à tes visiteurs, ... » car j'avais cru comprendre que tu voulais que tes visiteurs voient ton code PHP.

    Par ailleurs, le code que tu viens de donner, tu peux maintenant le modifier avec les conseils que je t'ai donnés. Notamment en donnant le second paramètre à mysql_fetch_array ou en optant pour mysql_fetch_assoc.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    mysql_fetch_array($a, MYSQL_ASSOC);
     
    // ou bien
     
    mysql_fetch_assoc($a);
    N'oublie pas de prendre connaissance de l'avertissement dans la doc à propos des fonctions mysql_*.
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

  15. #15
    Futur Membre du Club
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Juillet 2010
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Haute Saône (Franche Comté)

    Informations professionnelles :
    Activité : Technicien Help Desk
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2010
    Messages : 9
    Points : 6
    Points
    6
    Par défaut
    Ah oui autant pour moi j'avais mal compris.

    En fait je ne veut pas montrer le code a tous mes visiteurs mais seulement a des personnes autorisees a acceder a une partie du site ou se trouvera cette page.

    sinon j'ai trouve la solution:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <?php 
    $result = mysql_query("SELECT editeur, id, title FROM manga WHERE editeur NOT IN (SELECT titre FROM editeur) LIMIT 0, 30 ");
        while ($row = mysql_fetch_assoc($result)) {
            echo "<b>Id : </b>$row[id]<br /><b>Titre manga : </b>$row[title]<br /><b>Nom editeur concerne : </b>$row[editeur]<br /><br />";  
        }
        mysql_free_result($result);
    ?>

  16. #16
    Expert éminent
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 093
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 093
    Points : 6 754
    Points
    6 754
    Par défaut
    Donc finalement tu as opté pour la solution SQL
    Considère quand même de réécrire ta requête avec une jointure, c'est plus performant qu'une sous-requête dans la majorité des cas – et je suis certain que ça le sera dans ton cas.

    N'oublie pas le bouton
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

  17. #17
    Futur Membre du Club
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Juillet 2010
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Haute Saône (Franche Comté)

    Informations professionnelles :
    Activité : Technicien Help Desk
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2010
    Messages : 9
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par Watilin Voir le message
    Donc finalement tu as opté pour la solution SQL
    Considère quand même de réécrire ta requête avec une jointure, c'est plus performant qu'une sous-requête dans la majorité des cas – et je suis certain que ça le sera dans ton cas.

    N'oublie pas le bouton
    Ouui j'avoue avoir conserve la version sql avec array_diff je n'arrivais pas a avoir la liste des resultats.

    Pour la jointure je vais me pencher sur la question

    Voila le code avec la jointure effectuee

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $result = mysql_query("SELECT manga.* FROM manga LEFT JOIN editeur ON manga.editeur!=editeur.titre LIMIT 0,30");
    Comment savoir laquelle des deux methodes est vraiment la plus efficace. J'ai consulte ton lien et je vois que les avis sont partages sur ca.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Comparer deux tables
    Par ash_rmy dans le forum SAS Base
    Réponses: 3
    Dernier message: 03/11/2009, 16h09
  2. Comparer deux tables Access et afficher le resultat dans excel
    Par h_adil dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 01/06/2008, 18h57
  3. Comparer deux tables
    Par wachoo31 dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 02/10/2007, 19h55
  4. comparer deux tables
    Par khayate dans le forum VB.NET
    Réponses: 1
    Dernier message: 30/07/2007, 17h21
  5. comparer deux tables
    Par moicats dans le forum Access
    Réponses: 4
    Dernier message: 15/05/2006, 16h27

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo