RECHERCHER :
COMMUNAUTE MP
Identifiez vous ...
Devenir Membre
J'ai oublié mon MDP
DOMAINE MP
Bavardages
Langages Généraux
Langages Web
Langages DotNet
Autres langages
Dev. Jeux Video
Sécurité
Sys. Exploitation
Graphismes
Logiciels
Réseaux
Bases de données
Méthodologies
Emplois High-tech
Aide juridique
Articles juridiques
FORUM
Index des forums
Ajouter un sujet
Rechercher sujet
Contact Responsable
Devenir modérateur
CHAT MP IRC
Votre pseudo ...
Srv: irc.moteurprog.com
Chan: #MoteurProg
PARTICIPER
Plus de 3500 emplois.
Rechercher un job
Déposez votre CV
Emplois High-tech

Visiteur MP

 Assicuer, grouper des requêtes

Forum : PHP - BDD
Sous Catégorie : BDD
Type du sujet : Sujet Normale
FAQ : FAQ PHP - BDD

SUIVI DES SUJETS PAR MAIL

SUIVI PAR MAIL INACTIF

RESOLUTION DU SUJET SUJET NON RESOLU
BLOQUAGE DU SUJET SUJET ACTIF
APPARTENANCE A LA FAQ N'APPARTIENT PAS A LA FAQ


PAGES : [1] [2]

POSTER UN NOUVEAU SUJET REPONDRE A CE SUJET

FORUM PHP - BDD

PREMIERE PAGE

PAGE PRECEDENTE

Page précedente

Page suivante

PAGE SUIVANTE

DERNIERE PAGE
Agatoï
Nouveau membre
Inscrit : 26/02/2006
Messages : 5
Message
#89200
Posté le 26/02/06 à 22:04
Bonjour,

Je débute dans le Php et son association avec Mysql et je réalise une application associant Php et une base de données MySql.

J’ai besoin de filtrer des données sur plusieurs tables. J’ai créé plusieurs requêtes et j’ai essayé de les insérer dans une troisième.

Soit une table Livre. Chaque livre est défini par un titre, un éditeur, une année de publication.

$query_livre=" SELECT Livre.CleLivre, Livre.TITRE, Livre.CleEditeur FROM Livre WHERE (((Livre.CleEditeur)=$code_editeur));";
$livre = mysql_query($query_livre);
$row_livre=mysql_fetch_assoc($livre);

Soit une table Livre_mot_clé. Chaque livre peut avoir plusieurs mots clés d’attribués. Cette table est reliée à l’autre par « Livre_mot_cle.Cle.Livre ».

$query_mot_cle=" SELECT Livre_mot_cle.CleMot, Livre_mot_cle.CleLivre, Livre_mot_cle.Mot FROM Livre_mot_cle WHERE (((Livre_mot_cle.Mot)=$mot1)) OR ((Livre_mot_cle.Mot)=$mot2));";
$mot_cle = mysql_query($query_mot_cle);
$row_mot_cle=mysql_fetch_assoc($mot_cle);


Voici ce que j’ai tenté pour réunir les deux et qui ne fonctionne pas.

$query_resultat=" SELECT $row_livre[ClePhoto], $row_livre[TITRE]
FROM $row_livre INNER JOIN $row_mot_cle ON $row_livre[ClePhoto], = $row_mot_cle [ClePhoto], ORDER BY $row_livre[TITRE];";
$resultat = mysql_query($query_resultat);
$row_resultat =mysql_fetch_assoc($resultat);

Apparemment, on ne peut pas appeler tout seul $row_livre

Pour résumer, j’ai besoin de récupérer les données de la colonne Livre_mot_cle.Cle.Livre pour refiltrer la première requête.

Merci d’avance.

P.S. : voici la config : pack EasyPhp 1.7 : Php 4.3.3, Mysql 4.0.15

HAUT DE PAGE

PROFIL MEMBRE LUI ECRIRE 

Publicité
Inscrit : X
Messages : X
Message
#Aucun

HAUT DE PAGE

  

Spirit
Superviseur :
- C & C++
Modérateur :
- PHP
- Javascript
- MySQL
Avatar de Spirit
Inscrit : 07/04/2004
Messages : 1977
Message
#89208
Posté le 26/02/06 à 23:59
c'est le vrai code ?
parce qu'il a l'air archi faux pour ce que j'ai survolé.
sais-tu au moins faire une requete select ?
sais-tu utiliser les tableaux php ?
__________________________
Spirit - modérateur casu ^-^'

HAUT DE PAGE

PROFIL MEMBRE LUI ECRIRE 

Agatoï
Nouveau membre
Inscrit : 26/02/2006
Messages : 5
Message
#89213
Posté le 27/02/06 à 07:27
Bonjour,

Je pense que les deux premières requêtes sont bonnes puisque j'ai pu en afficher le résultat.

Tout le problème réside dans l'association des deux.

Pour répondre à tes questions, je sais effectivement faire une requête select, par contre je suis moins sûr en ce qui concerne les tableaux.

HAUT DE PAGE

PROFIL MEMBRE LUI ECRIRE 

Spirit
Superviseur :
- C & C++
Modérateur :
- PHP
- Javascript
- MySQL
Avatar de Spirit
Inscrit : 07/04/2004
Messages : 1977
Message
#89231
Posté le 27/02/06 à 12:52
[quote]$query_resultat=" SELECT $row_livre[ClePhoto], $row_livre[TITRE]
FROM $row_livre INNER JOIN $row_mot_cle ON $row_livre[ClePhoto], = $row_mot_cle [ClePhoto], ORDER BY $row_livre[TITRE];"; [/quote]
en lisant ça je me demande si tu le sais vraiment...

select c'est pour SELECTIONNER
pour insérer des données on fait pas une sélection -_-
__________________________
Spirit - modérateur casu ^-^'

ERREUR BBCODE SUR CE MESSAGE :
- La valeur de la balise "quote" n'est pas correcte !

HAUT DE PAGE

PROFIL MEMBRE LUI ECRIRE 

Agatoï
Nouveau membre
Inscrit : 26/02/2006
Messages : 5
Message
#89276
Posté le 27/02/06 à 19:47
Bonjour,

Nous revenons donc au point de départ : Comment faire pour récupérer les 'CleLivre' communes aux deux premières requêtes ?

Apparement pas de troisième requête.

Un tableau ? Une fonction ? Autre chose ?

HAUT DE PAGE

PROFIL MEMBRE LUI ECRIRE 

Spirit
Superviseur :
- C & C++
Modérateur :
- PHP
- Javascript
- MySQL
Avatar de Spirit
Inscrit : 07/04/2004
Messages : 1977
Message
#89285
Posté le 27/02/06 à 22:16
regarde chez les IN, c'ets un truc du genre tu sélectionnes d'abord ttes les clés, ensuite tu sélectionnes les autres selon un IN
__________________________
Spirit - modérateur casu ^-^'

HAUT DE PAGE

PROFIL MEMBRE LUI ECRIRE 

Agatoï
Nouveau membre
Inscrit : 26/02/2006
Messages : 5
Message
#89599
Posté le 02/03/06 à 19:27
Bonjour,

J’ai essayé les IN, mais je ne suis pas arrivé au résultat escompté. Par contre j’ai trouvé autre chose qui fonctionne :


Soit la requête deux :

$query_mot_cle=" SELECT DISTINCT Livre_mot_cle.CleLivre FROM Livre_mot_cle WHERE (((Livre_mot_cle.Mot)=$mot1)) OR ((Livre_mot_cle.Mot)=$mot2));";
$mot_cle = mysql_query($query_mot_cle);
$row_mot_cle=mysql_fetch_assoc($mot_cle);

En fait, j’avais juste besoin de la colonne CleLivre et de faire un distinct sur la requête afin que CleLivre soit un numéro unique.

Ensuite j’ai fais une boucle pour afficher les résultats

Do
{
$query_livre=" SELECT Livre.CleLivre, Livre.TITRE, Livre.CleEditeur FROM Livre WHERE (((Livre.CleLivre)=$row_mot_cle[CleLivre]) AND ((Livre.CleEditeur)=$code_editeur));";
$livre = mysql_query($query_livre);
$row_livre=mysql_fetch_assoc($livre);

echo $row_livre[‘TITRE’];
}
WHILE ($row_mot_cle=mysql_fetch_assoc($mot_cle));

Je transcris le code de mémoire. Il y a peut-être des erreurs, mais en tout cas, c’est sûr qu’il fonctionne.

Peut-être y a t’il une meilleure solution ?

HAUT DE PAGE

PROFIL MEMBRE LUI ECRIRE 

Czayfaboo
Co-Administrateur
Superviseur :
- Langages Dot.
Modérateur :
- CSharp (C#)
Chef de projet(s) :
- ID3.NET Library
- MoteurProg Work.

Avatar de Czayfaboo
Inscrit : 05/01/2005
Messages : 2928
Message
#89607
Posté le 02/03/06 à 21:23
Je trouve ton code très opaque.... si je peux te donner un conseil, vire tout les "Livre." pour les noms de tes champs, car quand tu fait ta requete, tu précise dans quelle table tu es, en l'occurence, ici, "FROM Livre" l'indique... et ca suffit.... ca simplifira déjà un peu ton code....

Ensuite... je fais po du PHP tous les jours... mais il me semble bien que tu pourrais éviter t'appeller 3 milliard de fois les données qui se trouvent dans ta table.... en faisant ceci (ou quelque chose du genre...) :

$query_livre="SELECT Livre.CleLivre, Livre.TITRE, Livre.CleEditeur FROM Livre WHERE (((Livre.CleLivre)=$row_mot_cle[CleLivre]) AND ((Livre.CleEditeur)=$code_editeur))"; $livre = mysql_query($query_livre); while (($row = mysql_fetch_assoc($row_livre)) != 0) //Ou quelque chose du genre { echo $row['TITRE']; }


Autres conseils pour améliorer ta base MySQL : laisse tes noms de champs en minuscules (enfin ca c'est vraiment du pas obligé, mais je trouve que c'est plus claire en minuscules)... vire tout les accents dans les noms de champs...
Et lors des requetes avec PHP, vire les ; à la fin (juste avant le guillement fermant) car ce n'est pas compatible avec toutes les versions MySQL et peut créer des erreurs fatales...

Voila....

++
__________________________
Sujet résolu ? Pensez à mettre le tag Image
Un problème en C# ? Vérifiez celui-ci n'est pas déjà résolu dans la FAQ et que le sujet n'est pas traité parmis les tutoriaux ou les articles avant de poster dans le forum C#.

HAUT DE PAGE

PROFIL MEMBRE LUI ECRIRE 

Spirit
Superviseur :
- C & C++
Modérateur :
- PHP
- Javascript
- MySQL
Avatar de Spirit
Inscrit : 07/04/2004
Messages : 1977
Message
#89613
Posté le 02/03/06 à 22:05
oui le distinct sert à récupérer chaque occurence une seule fois^^

prends en compte la remarque de czay sur les noms des champs et les majuscules également.

par contre, évite le do...while et préfère le while, si tu n'as aucun enregistrement retournée, tu vas faire une boucle pour afficher ... rien Smiley
__________________________
Spirit - modérateur casu ^-^'

HAUT DE PAGE

PROFIL MEMBRE LUI ECRIRE 

Agatoï
Nouveau membre
Inscrit : 26/02/2006
Messages : 5
Message
#89712
Posté le 03/03/06 à 17:41
Merci pour les tuyaux.

Mes défauts de mise en forme sont sans doute à mettre sur le compte d'un usage intensif d'Access.

Au début j'ai préféré le do... while car avec le while j'ai eu la surprise de ne pas voir le dernier enregistrement s'afficher. Mais le code ne devait pas être optimal puisque dans le cas qui nous occupe tout est là.

Voici ce que ça donne maintenant :

$query_mot_cle=" SELECT DISTINCT clelivre FROM Livre_mot_cle WHERE (((mot)=$mot1) OR ((mot)=$mot2))";
$mot_cle = mysql_query($query_mot_cle);
$row_mot_cle=mysql_fetch_assoc($mot_cle);

$clelivre_mot=$row_mot_cle['clelivre'];

$query_livre="SELECT clelivre, titre FROM Livre WHERE ((clelivre =$clelivre_mot) AND (CleEditeur=$code_editeur) ORDER BY titre";
$livre = mysql_query($query_livre);


while (($row_livre=mysql_fetch_assoc($livre))!=0);
{
echo $row_livre ['titre'];
}

HAUT DE PAGE

PROFIL MEMBRE LUI ECRIRE 
POSTER UN NOUVEAU SUJET REPONDRE A CE SUJET

PREMIERE PAGE

PAGE PRECEDENTE Page précédente

Page suivante

PAGE SUIVANTE DERNIERE PAGE

FORUM PHP - BDD



    PAGES : [1] [2]



.: Site Web développé par Julien Pichot et l'équipe MPWG avec www.evolvia-web.com :.