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 :

Requete avec jonction [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre confirmé
    Inscrit en
    Février 2009
    Messages
    168
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 168
    Par défaut Requete avec jonction
    Bonjour,
    j'ai une requête pour éditer une liste d'envoi de revues d'adhérents, elle utilise les données de 2 tables la table adhérents et la table cotisations
    la table adh pour le nom et adresse
    La table cotis pour le montant de cotisation
    le lien entre les deux est numero_adh
    je veux n'envoyer la revue qu'au adhérent qui ont payés 30 et plus

    je sors bien ma liste, mais à tous les adhérents, je pensais mettre dans le where
    AND
    table2.montant_Cotis = >30

    mais j'ai une erreur sql que je n'arrive pas à résoudre

    You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ' and galette2_cotis.montant_cotis=>30' at line 14


    Merci de votre aide

    le script:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    <?php
     
     
    include("_connect.php"); // voir Connexion au serveur et BDD
    $table1 = "adherents";
    $table2 = "cotis";
     
    $SQL="
    SELECT
    $table2.numero_adh,
    $table2.montant_cotis,
    $table1.numero_adh,
    $table1.nom_adh,
    $table1.prenom_adh,
    $table1.adresse_adh,
    $table1.adresse2_adh,
    $table1.cp_adh,
    $table1.ville_adh
    FROM
     $table1,
     $table2
    WHERE 	$table1.numero_adh = $table2.numero_adh
    AND
    table2.montant_Cotis = >30
    ";
    $result = mysql_query($SQL)or die('vous avez une Erreur SQL !--------><br />'.$sql.'<br />'.mysql_error());
     
    ////////////////////////////////////////////////////////////////////////////////
    //echo "selection faite---------->";
    echo mysql_numrows($result); 			// Pour Afficher le Nbre adh trouvé
    //echo "<br>";
    ////////////////////////////////////////////////////////////////////////////////
    // Construction de l'affichage
    ////////////////////////////////////////////////////////////////////////////////
    while($data= mysql_fetch_array($result))
    {
    echo "<table cellspacing=2 cellpadding=2 border=1 width=300px>";
    echo "<tr align=center><th>";  // rien dans la ligne entete
    echo "<br>";
    echo $data['numero_adh']."<br>";
    echo $data['nom_adh'] ."&nbsp;&nbsp;".  $data['prenom_adh'].	"<br>";
    echo $data['adresse_adh']."<br>";
    echo $data['adresse2_adh']."<br>";
    echo $data['cp_adh'] ."&nbsp;&nbsp;".  $data['ville_adh'].	"<br>";
    echo "<br>";
    echo "</th>";
    echo "</tr>";
    echo"</table>";
    }
    mysql_free_result ($result);
    mysql_close();
     
    ?>

  2. #2
    Membre émérite Avatar de Oishiiii
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2009
    Messages
    508
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Août 2009
    Messages : 508
    Par défaut
    Bonjour,

    Il faut écrire "<=" ou ">=" mais pas "= >".

    http://dev.mysql.com/doc/refman/5.0/...operators.html


  3. #3
    Membre chevronné
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2009
    Messages
    236
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Octobre 2009
    Messages : 236
    Par défaut
    Tu peux par ailleurs optimiser ta requête en renmplacant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $table1.numero_adh,
    $table1.nom_adh,
    $table1.prenom_adh,
    $table1.adresse_adh,
    $table1.adresse2_adh,
    $table1.cp_adh,
    $table1.ville_adh
    par :


  4. #4
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Par défaut
    Citation Envoyé par gwharl Voir le message
    Tu peux par ailleurs optimiser ta requête en renmplacant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $table1.numero_adh,
    $table1.nom_adh,
    $table1.prenom_adh,
    $table1.adresse_adh,
    $table1.adresse2_adh,
    $table1.cp_adh,
    $table1.ville_adh
    par :


    Non ! au contraire !
    La seule chose que cela optimise, c'est le temps qu'il faut au développeur pour écrire la requête !!!
    pour le reste, il est mieux d'éviter le SELECT * pour deux principales raisons :
    1/ Le select * renvoi au client des colonnes qui ne sont pas utiles, alourdissant ainsi la charge...
    2/ cela peut nuire à l'utilisation d'un éventuel index couvrant

    En plus, si une colonne est ajoutée par la suite à la table, le resulat de la requête avec un SELECT * ne sera plus le même, et il risque donc d'avoir a effectuer de la maintenance dans son appli...

  5. #5
    Membre chevronné
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2009
    Messages
    236
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Octobre 2009
    Messages : 236
    Par défaut
    Bien que cela charge des colonnes pouvant être inutiles, l'utilisation de "*" n'est pas préférable dans le cas ou bien sûr, les colonnes inutiles ne sont pas des dizaines ?

    En plus, si une colonne est ajoutée par la suite à la table, le résultat de la requête avec un SELECT * ne sera plus le même, et il risque donc d'avoir a effectuer de la maintenance dans son appli...
    A ce niveau c'est différent selon l'appli, personnellement j'aurais toujours des modifs à faire que je mette un "*" ou les champs spécifiques, sur les constructeurs.

  6. #6
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Par défaut
    Citation Envoyé par gwharl Voir le message
    Bien que cela charge des colonnes pouvant être inutiles, l'utilisation de "*" n'est pas préférable dans le cas ou bien sûr, les colonnes inutiles ne sont pas des dizaines ?
    Non. Vous demandez un travaille inutile à votre sgbd, en quoi cela sera plus performant ?

  7. #7
    Membre confirmé
    Inscrit en
    Février 2009
    Messages
    168
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 168
    Par défaut
    Bonjour a vous tous
    merci d'avoir pris le temps de regarder mon script
    j'ai toujours une erreur
    Parse error: syntax error, unexpected T_CONSTANT_ENCAPSED_STRING in /data/ftp/aisne/www/adherents/ on line 50

    avec la modif suivante


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    FROM
     $table1,
     $table2
    WHERE 	$table1.numero_adh = $table2.numero_adh,
    and
    table2.montant_Cotis ">=30"
     
    ";

  8. #8
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Par défaut
    enlève les doubles quotes...
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    WHERE 	$table1.numero_adh = $table2.numero_adh,
    AND table2.montant_Cotis >=30

  9. #9
    Membre confirmé
    Inscrit en
    Février 2009
    Messages
    168
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 168
    Par défaut
    merci de ta réponse

    c'est fait,
    j'ai une erreur de syntaxe

    You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ' and table2.montant_Cotis >=30' at line 14

  10. #10
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Par défaut
    Arfff,

    je n'avais pas vu la virgule en trop :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    WHERE 	$table1.numero_adh = $table2.numero_adh
    AND table2.montant_Cotis >=30

  11. #11
    Membre confirmé
    Inscrit en
    Février 2009
    Messages
    168
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 168
    Par défaut
    j'ai une erreur

    Unknown column 'table2.montant_Cotis' in 'where clause'

  12. #12
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Par défaut
    ...
    Il manque juste le $ à table2 !

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    WHERE 	$table1.numero_adh = $table2.numero_adh
    AND $table2.montant_Cotis >=30

  13. #13
    Membre confirmé
    Inscrit en
    Février 2009
    Messages
    168
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 168
    Par défaut
    merci sincèrement de ton aide

    je ne vois plus rien sur l'écran !!!!!!

    Problème résolu

  14. #14
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Par défaut
    Citation Envoyé par claude77 Voir le message
    je ne vois plus rien sur l'écran !!!!!!
    pour ce problème là, il faudrait plutôt poster dans la section hardware

    (désolé, j'ai pas pu m'empecher... )

  15. #15
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 815
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 815
    Billets dans le blog
    14
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    $table1 = "adherents";
    $table2 = "cotis";
     
    $SQL="
    SELECT
    $table2.numero_adh,
    $table2.montant_cotis,
    $table1.numero_adh,
    $table1.nom_adh,
    $table1.prenom_adh,
    $table1.adresse_adh,
    $table1.adresse2_adh,
    $table1.cp_adh,
    $table1.ville_adh
    FROM
     $table1,
     $table2
    WHERE     $table1.numero_adh = $table2.numero_adh
    AND
    table2.montant_Cotis = >30
    ";
    Quel est l'intérêt de mettre le nom des tables dans des variables ?
    Utilisez plutôt des alias pour alléger l'écriture de la requête.

    Les jointures s'écrivent depuis 1992 de manière normalisée avec l'opérateur JOIN !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    $SQL = "
        SELECT
            c.numero_adh,
            c.montant_cotis,
            a.numero_adh,
            a.nom_adh,
            a.prenom_adh,
            a.adresse_adh,
            a.adresse2_adh,
            a.cp_adh,
            a.ville_adh
        FROM adherents a
        INNER JOIN cotis c ON c.numero_adh = a.numero_adh
        WHERE c.montant_Cotis => 30
    ";
    C'est plus clair et vous pouvez tester directement votre requête dans MySQL.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  16. #16
    Membre confirmé
    Inscrit en
    Février 2009
    Messages
    168
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 168
    Par défaut
    merci de votre aide

    effectivement, c'est plus simple
    je vais tester

    le problème pour un novice, c'est de trouver des tutos à jour
    il y a des vieux coucous qui trainent sur internet

    Cordialement
    Bonne journée

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

Discussions similaires

  1. requete avec la valeur NULL
    Par Hinkel dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 12/11/2008, 16h39
  2. requete avec OBCD et visual c++
    Par Anonymous dans le forum MFC
    Réponses: 12
    Dernier message: 18/11/2004, 16h15
  3. Pb d'execution de requete avec un script php
    Par ythierrin dans le forum Requêtes
    Réponses: 3
    Dernier message: 22/08/2003, 14h34
  4. Requete avec une sous-requete... Ne fonctionne qu'a moitie..
    Par mythtvtalk.com dans le forum MS SQL Server
    Réponses: 10
    Dernier message: 18/08/2003, 09h54
  5. Requete avec des décimales
    Par Sandrine75 dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 27/06/2003, 10h18

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