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
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 ^-^'
[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 !
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 ^-^'
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.
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
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#.
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
__________________________
Spirit - modérateur casu ^-^'
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'];
}