Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD > PHP & MySQL
PHP & MySQL Forum d'entraide sur les fonctions MySQL avec PHP. Avant de poster -> FAQ MySQL, Cours MySQL et Sources MySQL. Pour les questions concernant le moteur MySQL plutôt que les fonctions PHP, merci d'utiliser le forum MySQL.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 23/02/2011, 10h43   #1
Candidat au titre de Membre du Club
 
Inscription : février 2009
Messages : 94
Détails du profil
Informations forums :
Inscription : février 2009
Messages : 94
Points : 11
Points : 11
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 :
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();
 
?>
claude77 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/02/2011, 10h50   #2
Membre chevronné
 
Avatar de Oishiiii
 
Administrateur de base de données
Inscription : août 2009
Messages : 404
Détails du profil
Informations personnelles :
Âge : 24

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

Informations forums :
Inscription : août 2009
Messages : 404
Points : 643
Points : 643
Bonjour,

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

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

Oishiiii est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/02/2011, 11h13   #3
Membre éclairé
 
Homme Jérémy
Étudiant
Inscription : octobre 2009
Messages : 236
Détails du profil
Informations personnelles :
Nom : Homme Jérémy
Localisation : France

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

Informations forums :
Inscription : octobre 2009
Messages : 236
Points : 322
Points : 322
Tu peux par ailleurs optimiser ta requête en renmplacant :

Code :
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 :

gwharl est déconnecté   Envoyer un message privé Réponse avec citation 03
Vieux 23/02/2011, 11h22   #4
Membre Expert
 
Inscription : janvier 2010
Messages : 1 084
Détails du profil
Informations personnelles :
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : janvier 2010
Messages : 1 084
Points : 1 573
Points : 1 573
Citation:
Envoyé par gwharl Voir le message
Tu peux par ailleurs optimiser ta requête en renmplacant :

Code :
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...
aieeeuuuuu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/02/2011, 11h58   #5
Membre éclairé
 
Homme Jérémy
Étudiant
Inscription : octobre 2009
Messages : 236
Détails du profil
Informations personnelles :
Nom : Homme Jérémy
Localisation : France

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

Informations forums :
Inscription : octobre 2009
Messages : 236
Points : 322
Points : 322
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 ?

Citation:
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.
gwharl est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/02/2011, 12h59   #6
Expert Confirmé
 
Homme
Inscription : mai 2002
Messages : 1 638
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : mai 2002
Messages : 1 638
Points : 2 630
Points : 2 630
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 ?
punkoff est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/02/2011, 14h35   #7
Candidat au titre de Membre du Club
 
Inscription : février 2009
Messages : 94
Détails du profil
Informations forums :
Inscription : février 2009
Messages : 94
Points : 11
Points : 11
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 :
1
2
3
4
5
6
7
8
FROM
 $table1,
 $table2
WHERE 	$table1.numero_adh = $table2.numero_adh,
and
table2.montant_Cotis ">=30"
 
";
claude77 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/02/2011, 14h38   #8
Membre Expert
 
Inscription : janvier 2010
Messages : 1 084
Détails du profil
Informations personnelles :
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : janvier 2010
Messages : 1 084
Points : 1 573
Points : 1 573
enlève les doubles quotes...
Code sql :
1
2
3
 
WHERE 	$table1.numero_adh = $table2.numero_adh,
AND table2.montant_Cotis >=30
aieeeuuuuu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/02/2011, 14h57   #9
Candidat au titre de Membre du Club
 
Inscription : février 2009
Messages : 94
Détails du profil
Informations forums :
Inscription : février 2009
Messages : 94
Points : 11
Points : 11
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
claude77 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/02/2011, 15h00   #10
Membre Expert
 
Inscription : janvier 2010
Messages : 1 084
Détails du profil
Informations personnelles :
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : janvier 2010
Messages : 1 084
Points : 1 573
Points : 1 573
Arfff,

je n'avais pas vu la virgule en trop :

Code sql :
1
2
3
 
WHERE 	$table1.numero_adh = $table2.numero_adh
AND table2.montant_Cotis >=30
aieeeuuuuu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/02/2011, 15h09   #11
Candidat au titre de Membre du Club
 
Inscription : février 2009
Messages : 94
Détails du profil
Informations forums :
Inscription : février 2009
Messages : 94
Points : 11
Points : 11
j'ai une erreur

Unknown column 'table2.montant_Cotis' in 'where clause'
claude77 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/02/2011, 15h11   #12
Membre Expert
 
Inscription : janvier 2010
Messages : 1 084
Détails du profil
Informations personnelles :
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : janvier 2010
Messages : 1 084
Points : 1 573
Points : 1 573
...
Il manque juste le $ à table2 !

Code sql :
1
2
3
 
WHERE 	$table1.numero_adh = $table2.numero_adh
AND $table2.montant_Cotis >=30
aieeeuuuuu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/02/2011, 16h19   #13
Candidat au titre de Membre du Club
 
Inscription : février 2009
Messages : 94
Détails du profil
Informations forums :
Inscription : février 2009
Messages : 94
Points : 11
Points : 11
merci sincèrement de ton aide

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

Problème résolu
claude77 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/02/2011, 17h29   #14
Membre Expert
 
Inscription : janvier 2010
Messages : 1 084
Détails du profil
Informations personnelles :
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : janvier 2010
Messages : 1 084
Points : 1 573
Points : 1 573
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... )
aieeeuuuuu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/02/2011, 11h33   #15
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 10 993
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
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 : 10 993
Points : 18 246
Points : 18 246
Envoyer un message via MSN à CinePhil
Code :
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 :
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 de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« 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 Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/02/2011, 12h20   #16
Candidat au titre de Membre du Club
 
Inscription : février 2009
Messages : 94
Détails du profil
Informations forums :
Inscription : février 2009
Messages : 94
Points : 11
Points : 11
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
claude77 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 13h07.


 
 
 
 
Partenaires

Hébergement Web