Sélectionner des champs de 3 tables différents !!!

Sélectionner des champs de 3 tables différents !!! - PHP - Programmation

Marsh Posté le 24-07-2008 à 23:49:27    

Salut à tous,
 
Je suis une grande débutante en php et voilà mon souci. J'ai 3 tables différents : comments, videos, et users
 
Les données que je veux extraire :
Table comments : comment, username
Table videos : vid_id
Table users : avatar
 
Ces tables sont liées :
Les tables comments et videos ont un champ identique : id (c'est la même donnée)
Les tables comments et users ont un champ identique : username (c'est la même donnée) aussi
 
Voici le début de mon code mais je ne sais pas sélectionner 3 tables, donc si quelqu'un peut m'aider à le compléter :
<?
// Definition des identifiants de connexion
$DBHOST=''; // Serveur Mysql
$USEBDD='mabdd'; // Base de donnée utilisée
$USER='mabdd'; // Administrateur de la bdd
$PASSWORD=''; // Mot de passe d'accès à la bdd
 
// Connexion à MySQL :
$link = mysql_connect($DBHOST,$USER,$PASSWORD);
$db = mysql_select_db($USEBDD,$link);
 
// Extraction video
$requete="SELECT comment, username FROM comments ORDER BY id desc LIMIT 7";
$result=mysql_db_query("mabdd",$requete);


Message édité par spespam le 26-07-2008 à 02:00:16
Reply

Marsh Posté le 24-07-2008 à 23:49:27   

Reply

Marsh Posté le 25-07-2008 à 08:16:53    

essaye ca:

Code :
  1. SELECT comments.comment,comments.username, videos.vid_id,users.avatar
  2. FROM comments,videos,users
  3. WHERE
  4. comments.uniq_id=video.uniq_id AND
  5. comments.username=users.username
  6. ORDER BY id desc
  7. LIMIT 7


 
edit:
dans ton order by je pense que c'est pas id mais uniq_id non?


Message édité par sankukai8 le 25-07-2008 à 08:18:16
Reply

Marsh Posté le 25-07-2008 à 09:54:30    

Code :
  1. SELECT comments.comment,comments.username, videos.vid_id,users.avatar
  2. FROM
  3. comments
  4. INNER JOIN videos ON comments.uniq_id=video.uniq_id
  5. INNER JOIN users comments.username=users.username
  6. ORDER BY id DESC
  7. LIMIT 7


autant apprendre à écrire les jointures correctement dès le départ :o


Message édité par anapajari le 25-07-2008 à 09:54:43

---------------
Software and cathedrals are much the same - first we build them, then we pray.
Reply

Marsh Posté le 25-07-2008 à 09:58:53    

note: il manque un 'ON' dans le deuxieme inner join


---------------
arg(z) = pi /2 donc z = i, moi je prends pas
Reply

Marsh Posté le 25-07-2008 à 15:18:04    

Voici le code final selon vos indications.
 
<?
// Definition des identifiants de connexion
$DBHOST=''; // Serveur Mysql
$USEBDD='mabdd'; // Base de donnée utilisée
$USER='mabdd'; // Administrateur de la bdd
$PASSWORD='xxxxxx'; // Mot de passe d'accès à la bdd
 
// Connexion à MySQL :
$link = mysql_connect($DBHOST,$USER,$PASSWORD);
$db = mysql_select_db($USEBDD,$link);
 
// Extraction
 
$requete="SELECT comments.comment,comments.username,videos.vid_id,users.avatar
FROM  
comments
INNER JOIN videos ON comments.uniq_id=videos.uniq_id  
INNER JOIN users ON comments.username=users.username
ORDER BY id desc
LIMIT 7";
$result=mysql_db_query("mabdd",$requete);
 
// Affiche resultats
while($voir=mysql_fetch_array($result))
{
$comment_court= htmlspecialchars(substr($voir['comment'], 0, 55)) . "...";
$username = htmlspecialchars($voir['username']);
$vid_id = htmlspecialchars($voir['vid_id']);
 
echo ". <a href=\"myurl.php?vid=$vid_id\" target=\"_self\">".$comment."</a><br>par -".$username."- <br>  
";
}
?>
 
Et le résultat m'affiche une erreur :
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /www/test.php on line 25
 
PS : j'ai pas encore testé l'affichage de l'avatar


Message édité par spespam le 25-07-2008 à 15:20:28
Reply

Marsh Posté le 25-07-2008 à 15:22:35    

ta requête doit avoir un souci  :o

Reply

Marsh Posté le 25-07-2008 à 15:46:08    

Code :
  1. <?
  2. // Definition des identifiants de connexion
  3. $DBHOST=''; // Serveur Mysql
  4. $USEBDD='mabdd'; // Base de donnée utilisée
  5. $USER='mabdd'; // Administrateur de la bdd
  6. $PASSWORD='xxxxxx'; // Mot de passe d'accès à la bdd
  7. // Connexion à MySQL :
  8. $link = mysql_connect($DBHOST,$USER,$PASSWORD);
  9. $db = mysql_select_db($USEBDD,$link);
  10. // Extraction
  11. $requete="SELECT comments.comment,comments.username,videos.vid_id,users.avatar
  12. FROM 
  13. comments
  14. INNER JOIN videos ON comments.uniq_id=videos.uniq_id 
  15. INNER JOIN users ON comments.username=users.username
  16. ORDER BY uniq_id desc
  17. LIMIT 7";
  18. $result=mysql_db_query("mabdd",$requete);
  19. if(!$result ) { // Traitement d'erreur
  20. echo mysql_error();
  21. }
  22. else { // Affiche resultats
  23. if (mysql_num_rows($result) != 0) {
  24.  while($voir=mysql_fetch_array($result)) {
  25.   $comment_court= htmlspecialchars(substr($voir['comment'], 0, 55)) . "...";
  26.   $username = htmlspecialchars($voir['username']);
  27.   $vid_id = htmlspecialchars($voir['vid_id']);
  28.   echo ". <a href=\"myurl.php?vid=$vid_id\" target=\"_self\">".$comment."</a><br>par -".$username."- <br>";
  29.  }
  30. }
  31. }
  32. ?>


 
comme l'a signalé bricocoman, ta requete a une erreur (order by id desc au lieu de order by uniq_id desc ?)
 
et vu que tu cherches à extraire les résultats de $result dans tous les cas...

Message cité 1 fois
Message édité par Marty_McFly le 25-07-2008 à 15:48:45

---------------
arg(z) = pi /2 donc z = i, moi je prends pas
Reply

Marsh Posté le 25-07-2008 à 16:02:39    

bricocoman a écrit :

ta requête doit avoir un souci  :o


Oui elle a un souci puisqu'elle affiche une erreur. Je pense que les développeurs bons et expérimentés du forum pourront m'aider à trouver la faille :o

Reply

Marsh Posté le 25-07-2008 à 16:10:23    

Marty_McFly a écrit :

Code :
  1. <?
  2. // Definition des identifiants de connexion
  3. $DBHOST=''; // Serveur Mysql
  4. $USEBDD='mabdd'; // Base de donnée utilisée
  5. $USER='mabdd'; // Administrateur de la bdd
  6. $PASSWORD='xxxxxx'; // Mot de passe d'accès à la bdd
  7. // Connexion à MySQL :
  8. $link = mysql_connect($DBHOST,$USER,$PASSWORD);
  9. $db = mysql_select_db($USEBDD,$link);
  10. // Extraction
  11. $requete="SELECT comments.comment,comments.username,videos.vid_id,users.avatar
  12. FROM 
  13. comments
  14. INNER JOIN videos ON comments.uniq_id=videos.uniq_id 
  15. INNER JOIN users ON comments.username=users.username
  16. ORDER BY uniq_id desc
  17. LIMIT 7";
  18. $result=mysql_db_query("mabdd",$requete);
  19. if(!$result ) { // Traitement d'erreur
  20. echo mysql_error();
  21. }
  22. else { // Affiche resultats
  23. if (mysql_num_rows($result) != 0) {
  24.  while($voir=mysql_fetch_array($result)) {
  25.   $comment_court= htmlspecialchars(substr($voir['comment'], 0, 55)) . "...";
  26.   $username = htmlspecialchars($voir['username']);
  27.   $vid_id = htmlspecialchars($voir['vid_id']);
  28.   echo ". <a href=\"myurl.php?vid=$vid_id\" target=\"_self\">".$comment."</a><br>par -".$username."- <br>";
  29.  }
  30. }
  31. }
  32. ?>


 
comme l'a signalé bricocoman, ta requete a une erreur (order by id desc au lieu de order by uniq_id desc ?)
 
et vu que tu cherches à extraire les résultats de $result dans tous les cas...


 
 
J'ai testé ta correction du code. Et là, il me met : Column 'id' in order clause is ambiguous
Et en mettant, order by uniq_id, il me met : Column 'uniq_id' in order clause is ambiguous


Message édité par spespam le 25-07-2008 à 16:11:43
Reply

Marsh Posté le 25-07-2008 à 16:14:29    

excuse moi, un oubli:
comments.uniq_id


---------------
arg(z) = pi /2 donc z = i, moi je prends pas
Reply

Marsh Posté le 25-07-2008 à 16:14:29   

Reply

Marsh Posté le 25-07-2008 à 16:44:47    

Merci. Première étape réussie, je vais essayer maintenant d'intégrer l'avatar de l'user. ;-)
Je vous fais un retour ici.

Reply

Marsh Posté le 25-07-2008 à 16:50:17    

d'ailleurs, ça me fait penser:
 
tu arrives à voir la liste des liens? parce que tu fais un echo [...blabla...]".$comment."[..suite..] et que $comment ne m'a pas l'air d'etre trop défini...


---------------
arg(z) = pi /2 donc z = i, moi je prends pas
Reply

Marsh Posté le 25-07-2008 à 17:10:59    

Oui j'ai mis $comment_court au lieu de $comment et ça marche.  
 
J'ai essayé d'afficher les résultats dans un tableau (1 ligne, 2 colonnes) pour que ça fasse plus joli.
 
A gauche (1ère colonne) : l'avatar
A droite (2ème colonne) : le username du posteur puis à la ligne le commentaire (tjrs dans la 2eme colonne).
 
Voici le code :
$comment_court= htmlspecialchars(substr($voir['comment'], 0, 55)) . "...";
$username = htmlspecialchars($voir['username']);
$uniq_id = htmlspecialchars($voir['uniq_id']);
$avatar = htmlspecialchars($voir['avatar']);
 
echo "
<table width="150" border="0">
  <tr>
    <td><a href=\"myurl.php?vid=$vid_id\" target=\"_self\"><img height='119' width='160' src=".$avatar."></a></td>
    <td>".$username."<br><a href=\"myurl.php?vid=$vid_id\" target=\"_self\">".$comment_court."</a></td>
  </tr>
</table>
";
}
}
}
?>
 
Et j'ai une erreur :  
Parse error: syntax error, unexpected T_LNUMBER, expecting ',' or ';' in /www/test.php on line 40
 
J'ai dû oublier un " quelque part mais où ?


Message édité par spespam le 25-07-2008 à 17:11:57
Reply

Marsh Posté le 25-07-2008 à 17:24:53    

echo "
<table width="150" border="0">  
 
rien que la ca va planter

Reply

Marsh Posté le 25-07-2008 à 17:25:45    

pourquoi ?

Reply

Marsh Posté le 25-07-2008 à 17:26:55    

tiens, en mettant <table width='150' border='0'>  ça plante plus ! lol !

Reply

Marsh Posté le 25-07-2008 à 17:27:38    

des guillemets dans des guillmets sans aucune protection

Reply

Marsh Posté le 25-07-2008 à 17:28:43    

Va quand meme falloir que tu lises quelques tutos de programmation php, car bon si rien que le fait de passer de ' à " te surprend, tu vas avoir bcp de surprise dans ton dev.

Reply

Marsh Posté le 25-07-2008 à 17:30:26    

spa faux :)
 
surtout que 2 lignes plus bas, tu mets les \ avant les " comme il faut...
tu es un adepte du copier/coller sauvage?


Message édité par Marty_McFly le 25-07-2008 à 17:31:19

---------------
arg(z) = pi /2 donc z = i, moi je prends pas
Reply

Marsh Posté le 25-07-2008 à 17:31:09    

ça marche mais l'image de l'avatar ne s'affiche pas.
Il m'affiche la mauvaise url.
 
Exemple : monsite.com/image.gif au lieu de monsite.com/dossier/image.gif

Reply

Marsh Posté le 25-07-2008 à 17:33:12    

Sebastien a écrit :

Va quand meme falloir que tu lises quelques tutos de programmation php, car bon si rien que le fait de passer de ' à " te surprend, tu vas avoir bcp de surprise dans ton dev.


j'en lis mais à un moment les tutos ont leurs limites et quand tu bloques, t'es obligée de passer par les forums.
Tout le code que j'ai pondu là haut je l'ai pondu avec des tutos :o
mais c'est vrai que j'ai bcp de progrès à faire, d'où les forums où c'est plus interactif et où il y a des gens sympa qui t'expliquent volontiers.


Message édité par spespam le 25-07-2008 à 17:33:58
Reply

Marsh Posté le 25-07-2008 à 17:33:40    

euh...
Poisson d'avril?
 

Code :
  1. <a href=\"myurl.php?vid=$vid_id\" target=\"_self\"><img height='119' width='160' src='dossier/".$avatar."'>


 
note que tu avais oublié de mettre les ' englobant src
 
et sinon, je te conseillerai de choisir: soit tu mets des \", soit tu mets des '
 
en faisant un mix des deux.... j'sais pas, bof quoi

Message cité 1 fois
Message édité par Marty_McFly le 25-07-2008 à 17:34:55

---------------
arg(z) = pi /2 donc z = i, moi je prends pas
Reply

Marsh Posté le 25-07-2008 à 17:36:04    

spespam a écrit :

ça marche mais l'image de l'avatar ne s'affiche pas.
Il m'affiche la mauvaise url.
 
Exemple : monsite.com/image.gif au lieu de monsite.com/dossier/image.gif


 
tout simplement car $avatar ne doit pas contenir le repertoire dossier ^^

Reply

Marsh Posté le 25-07-2008 à 17:37:21    

Marty_McFly a écrit :

euh...
Poisson d'avril?

 
Code :
  1. <a href=\"myurl.php?vid=$vid_id\" target=\"_self\"><img height='119' width='160' src='dossier/".$avatar."'>
 

note que tu avais oublié de mettre les ' englobant src

 

et sinon, je te conseillerai de choisir: soit tu mets des \", soit tu mets des '

 

en faisant un mix des deux.... j'sais pas, bof quoi

 

ou de sortir toute la partie html du code php ou d'inverser ' et "

 

Ah y a tellement de facons de faire les choses ^^


Message édité par Sebastien le 25-07-2008 à 17:37:35
Reply

Marsh Posté le 25-07-2008 à 17:41:37    

putain je suis fatiguée lol ! au temps pour moi.
Je suis devenue bigleuse à force de plancher sur ce code, je vois plus les erreurs évidentes.
Merci de ton aide marty_mcfly ;)
 
ps : le code marche très bien  :hello:


Message édité par spespam le 25-07-2008 à 17:44:00
Reply

Marsh Posté le 25-07-2008 à 17:43:22    

Sebastien a écrit :


 
tout simplement car $avatar ne doit pas contenir le repertoire dossier ^^


 
Franchement je ne sais même pas pourquoi tu es sur ce forum d'entraide. Depuis le début tu n'es d'aucune aide sauf pour narguer les débutants. Sans rancune....

Reply

Marsh Posté le 25-07-2008 à 17:47:39    

ben pourquoi ?  
N'ai je pas répondu à ta question la ?

Reply

Marsh Posté le 25-07-2008 à 17:51:31    

NIMPORTE QUOI ! ! !
je pense que spespam veut dire qu'il est trop débutant pour comprendre tes réponses. Tu ajoutes un ton agressif, et ça donne:

Citation :


Franchement je ne sais même pas pourquoi tu es sur ce forum d'entraide. Depuis le début tu n'es d'aucune aide sauf pour narguer les débutants. Sans rancune....


alors que... voila quoi, nos réponses se valent tout a fait :)


---------------
arg(z) = pi /2 donc z = i, moi je prends pas
Reply

Marsh Posté le 25-07-2008 à 17:58:39    

tiens d'ailleurs, j'y pense, y a un moyen de rewriter le lien?

Reply

Marsh Posté le 25-07-2008 à 18:01:15    

si ton apache a le module mod_rewrite d'actif oui

Reply

Marsh Posté le 25-07-2008 à 18:03:21    

Marty_McFly a écrit :

NIMPORTE QUOI ! ! !
je pense que spespam veut dire qu'il est trop débutant pour comprendre tes réponses. Tu ajoutes un ton agressif, et ça donne:

Citation :


Franchement je ne sais même pas pourquoi tu es sur ce forum d'entraide. Depuis le début tu n'es d'aucune aide sauf pour narguer les débutants. Sans rancune....


alors que... voila quoi, nos réponses se valent tout a fait :)


Ouais c'est peut-être ça. En gros, toutes les interventions de Sébastien ne m'ont été d'aucune aide alors que celles de Marty m'ont aidé à localiser mes erreurs et à savoir pourquoi ça n'a pas marché. J'voulais pas agresser Sébastien, si c'est le cas je m'en excuse, c'est juste que je trouve que si on veut réagir dans ce forum, il faut que ça soit dans un esprit d'entraide, pas pour dire va lire les tuto, si tu t'étonnes à chaque " etc
Comme je l'ai déjà dit, des tutos j'en ai déjà lu, si tu savais mon niveau il y a quelques mois, et celui que j'ai maintenant, il y a un réel fossé même si j'ai encore un niveau très bas (mais c'est peut-être parce que je ne me destine pas à être développeuse ^^). Je fais juste des scripts ponctuellement pour des besoins très ponctuels.

Reply

Marsh Posté le 25-07-2008 à 18:06:22    

X


Message édité par spespam le 13-08-2008 à 03:48:46
Reply

Marsh Posté le 25-07-2008 à 18:23:42    

X


Message édité par spespam le 13-08-2008 à 03:48:28
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed