07 02 2002 à 16:46 |
Bjr à tous, Bon voilà, j'ai deux tables . Une avec toutes les données sur des auteurs (nom, prénom, etc... et ID) et une autre table avec toutes les données sur des fichiers postées par des auteurs ( NomFichier, type, taille, etc..., ET Id de l'auteur). j'aimerais pouvoir en une seul requête récolter toutes les informations concernant un auteur et toutes les données sur les fichiers postés par celui-ci. Je pense qu'il doit y avoir moyen de faire cela avec un "Inner Join" mais je sais plus comment ET SURTOUT, je ne sais plus comment différencier les informations reçues pour la table auteur et par la table fichier. Pff , je sais pas si j'ai été clair mais bon. Si qlq un sais m'expliquer comment faire ca en ASP , ce serait le top, sinon, le php, c'est déjà nickel ...J dirais même nickel chrome... A plus, R-Matou |
|
07 02 2002 à 17:27 |
en sql microsoft : SELECT auteurs.nom,auteurs.prenom,fichiers.nomfichier FROM auteurs INNER JOIN fichiers ON auteurs.id = fichiers.auteurid en sql normalisé : SELECT auteurs.nom,auteurs.prenom,fichiers.nomfichier FROM auteurs,fichiers WHERE auteurs.id = fichiers.auteurid arghhh j'ai oublier le regroupement par l'identifiant de l'auteur. tu ajoute à la fin des requetes un "GROUP BY auteurs.id" et tu aura un regroupement des fichiers suivants l'identifiant de l'auteur. c'est ça que tu appelle différencier ?? essaye ça et dis moi si ça merdouille ou si j'ai bien compris ta question. a+ |
|
07 02 2002 à 18:42 |
Par contre je me trompe peut être mais il me semble que la clause affectée par le GROUP BY, ici auteurs.id doit être incluse dans le SELECT. Non ? @+ |
|
07 02 2002 à 18:53 |
Non ce que j'appelle différencier , c'est que en fait, j'aimerais mettre en entête toute les informations sur l'auteur et puis tous les fichiers qui sont en rapport avec celui ci . Par exemple comme ca : Mathieu Bazelaire Web-designer Belgique Namur **************************************** Travaux1 - taille - commentaire: "bonjour" ------------------------------------------------- Travaux2 - taille - commentaire: "deuxième fichier" ------------------------------------------------- Travaux3 - taille - commentaire: "test en labo" ------------------------------------------------- Travaux4 - taille - commentaire: "encore un fichier nul" ------------------------------------------------- Travaux5 - taille - commentaire: "bon voilà c'est fini pour l'exemple" ------------------------------------------------- Tu comprends mieux ? merci déjà pour la requête ca a l'air d'être bon... R-matou |
|
07 02 2002 à 21:45 |
Salut, Apparement u veux une solution complète non ? Tu sembles avoir les tables et ce que tu veux c'est le script pour les lire et les mettre en "forme" Table Auteurs (id, nom, prenom, pseudo, job, pays, ville, commentaire...) Table Realisations (id, idauteur, titre, type, taille, texte...) On suppose que tu passe l'id de l'auteur en paramètres, ex : http://www.bah.be/test/show_real.php3?id=12 <? include("scripts/connexion.php3"); // Connexion à la base MySQL $req1 = mysql_query("SELECT * FROM auteurs WHERE id= '$id' "); // Première requête pour les infos de l'auteur $nom = mysql_result($req1,0, 'nom'); $prenom = mysql_result($req1,0, 'prenom'); $job = mysql_result($req1,0, 'job'); $pays = mysql_result($req1,0, 'pays'); $ville = mysql_result($req1,0, 'ville'); echo "$prenom $nom $job $pays $ville <br> "; $tmp = $prenom." ".$nom." ".$job." ".$pays." ".$ville; $long = strlen($tmp); for($i=0;$i <$lon;$i++) { echo "*"; // Pour ajuster le nombre d'étoiles aux infos au dessus } echo " <br> "; $req2 = mysql_query("SELECT * FROM realisation WHERE idauteur= '$id' "); $res = mysql_numrows($req2); for($i=0;$i <$res;$i++) { $titre = mysql_result($req2,$i, 'titre'); $taille = mysql_result($req2,$i, 'taille'); $texte = mysql_result($req2,$i, 'texte'); $affiche = "$titre - $taille - commentaire : $texte <br> "; echo $affiche; for($j=0;$j <100;$j++) { echo "-"; } echo " <br> "; } ?> Voila, c'est pas de l'ASP mais j'espère répondre à tes attentes... Si il y a des bugs (fortement probable ^^) c'est surtout du au fait que je l'ai fait un peu à l'arrache La mise en forme est celle de ton poste (à peu près ...) à toi de faire mumuse avec le HTML Bon courage. @+ En plus je risque de me faire engueuler par les admins pour avoir fait la brute en collant tout le script là ^^ Mea Culpa |
|
08 02 2002 à 08:26 |
Merci Angel2k, c'est gentil d'avoir voulu m'aider mais le réel problème n'est pas là...Tout ca , je sais le faire sans prob. Le problème vient du faite que avec ta méthode (la plus courante et celle que j'utilise actuellement ) , pour chaque auteur qui va être visualisé , le serveur va recevoir 2 requêtes "in ze tronch".... Hors pour éviter cela , il ya moyen (il me semble) de n'envoyer qu'une requête SQL (de nouveau il me semble).... Je sais que ca parait débile quand on parle de une ou deux requêtes mais si on applique ca à un site qui a 100 personnes online, on peux parler de 100 ou 200 requêtes... et là , la différence se fait ressentir sur la rapidité du site. Et donc, on fait une seul requête (avec innerjoin je suppose) mais comment fait on pour différencier les données de l'auteur (une seul ligne puisque un seul auteur) et les données des fichiers (plusieurs lignes puisque plusieurs fichiers) ( rhooo j'en fais de ces tartines...) Allez , c'est pas grâââve , si personne ne sait, je resterai dans l'amateurisme en prog mais sinon... R-Matou |
|
08 02 2002 à 08:54 |
Qu'est ce qu'il nous fait le Matou, __nik_o t'as donne la reponse ! SELECT auteurs.nom,auteurs.prenom,fichiers.nomfichier FROM auteurs INNER JOIN fichiers ON auteurs.id = fichiers.auteurid Ce n'est pas ce que tu voulais ? ++gom |
|
09 02 2002 à 16:16 |
salut vous avez la solution tu veux faire ca : Mathieu Bazelaire Web-designer Belgique Namur **************************************** Travaux1 - taille - commentaire: "bonjour" ------------------------------------------------- Travaux2 - taille - commentaire: "deuxième fichier" ------------------------------------------------- Travaux3 - taille - commentaire: "test en labo" ------------------------------------------------- Travaux4 - taille - commentaire: "encore un fichier nul" ------------------------------------------------- Travaux5 - taille - commentaire: "bon voilà c'est fini pour l'exemple" ------------------------------------------------- et niko propose : SELECT auteurs.nom,auteurs.prenom,fichiers.nomfichier FROM auteurs,fichiers WHERE auteurs.id = fichiers.auteurid tout est là. trie le résultat de ta sélection par auteur (group by voir niko) et ensuite dans ta boucle d'affichage, intialise une variable temporaire pour le nom de l'auteur. en pseudo code ca donne : si (auteur.nom == nom_auteur_temp ) { // AUTEUR IDENTIQUE -> PAS D'AFFICHAGE DU NOM } else { // AUTEUR DIFFERENT -> AFFICHAGE DU NOM print (auteur.nom) print (*******************************) } print (fichiers.nomfichier) print (-----------------------) nom_auteur_temp = auteur.nom ca fait une requete. un join classique. a+ |
|
09 02 2002 à 16:19 |
t'as vu l'indentation Ben ? ;) |
|
09 02 2002 à 16:21 |
jointures & jointures externes par l'exemple imaginons qu'on ait un forum avec 2 tables : les sujets et les réponses. on veut un moteur de recherche sur le forum, qui recherche a la fois dans les sujets et dans les reponses. on aura une requete simple dans ce style : select distinct s.* from sujets s, reponses r where s.cle=r.cle_sujet // jointure and ( s.commentaire like '%$recherche%' or r.commentaire like '%$recherche%' ) // la séquence recherchée tout va bien, on obtient la liste de tous les sujets qui contiennent l'occurence recherchée ou dont l'une au moins des reponses contient ladite occurence. mais il y a juste un probleme. si le sujet n'a pas de reponse, la condition s.cle=r.cle_sujet n'est pas vérifiée et l'enregistrement ne sera pas sélectionné lors de l'exécution de la requete. c'est dommage, on y etait presque ;) c'est une jointure classique. là intervient la jointure externe : select distinct s.* from sujets left join reponses on sujets.cle=reponses.cle_sujet where s.cle=r.cle_sujet and ( s.commentaire like '%$recherche%' or r.commentaire like '%$recherche%' ) là vous obtenez tous les sujets contenant l'occurence ou dont une des réponses contient l'occurence, meme les sujets sans reponse . la table de gauche (sujets) est dite DIRECTRICE et celle de droite (reponses) OPTIONNELLE . |
|
11 02 2002 à 18:36 |
oi, merci , je ne visualisait pas bien comment le résultat sortait ... Maintenant, je me suis rappelé . c'est top top .. merci. Merci aussi pour ton petit cours, je crois qu'il me sera pratique. Et désolé de ne pas avoir pigé plus tôt pour les auteres ;) ;) ;) R-Matou |
|
Pour répondre à ce sujet (et notifier automatiquement son auteur), cliquez sur le bouton REPONDRE A CE SUJET. Si vous voulez en plus avertir de votre réponse une personne qui a participé à ce sujet, cliquez sur le bouton en face de son intervention. Enfin si vous voulez inviter quelqu'un à réagir, utilisez les appeaux ci-dessous. Seuls les membres logués peuvent utiliser les appeaux et seuls les membres actifs peuvent être appeautés ^^. Bonne notification ! Vous n'êtes pas membre ou vous n'êtes pas logué(e) ou les appeaux sont désactivés dans votre profil. Vous ne pouvez pas utiliser les appeaux. |