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

R-Matou (anacoluthe hyperbolique lvl 1 - )
47 ans (Namur)
r-matou@bah.be
http://www.bah.be

Gnouf est présent sur internet (et particulièrement Pie)





  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+

niko (admin. exilé fanatique - )
44 ans (Reims)
niko@piregwan.com
http://summerefresh.piregwan.com

cet espace est à vendre ! mise à prix à 335€





  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 ?

@+

angel2k (exilé fanatique - )
41 ans (Amiens)
angel2k@piregwan.com | 110643996

cet espace est à vendre ! mise à prix à 518€





  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



R-Matou (anacoluthe hyperbolique lvl 1 - )
47 ans (Namur)
r-matou@bah.be
http://www.bah.be

Gnouf est présent sur internet (et particulièrement Pie)





  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

angel2k (exilé fanatique - )
41 ans (Amiens)
angel2k@piregwan.com | 110643996

cet espace est à vendre ! mise à prix à 518€





  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

R-Matou (anacoluthe hyperbolique lvl 1 - )
47 ans (Namur)
r-matou@bah.be
http://www.bah.be

Gnouf est présent sur internet (et particulièrement Pie)





  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

gom3z (l'ami des belges fanatique lvl 1 - )
48 ans (Nottingham)
gom3z@piregwan.com | 22259570

Chasseurs de Galinettes Cendrées de père en fils!





  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+

piregwan (agent mad fanatique lvl 1 - )
47 ans (chamb�ry, 73)
krakoukas@piregwan-genesis.com | 91327470
http://www.piregwan-genesis.com

" s'il vous plait mademoiselle, j'aurais voulu prendre une leçon particulière avec anne laurencin " JCD





  09 02 2002 à 16:19


t'as vu l'indentation Ben ? ;)

piregwan (agent mad fanatique lvl 1 - )
47 ans (chamb�ry, 73)
krakoukas@piregwan-genesis.com | 91327470
http://www.piregwan-genesis.com

" s'il vous plait mademoiselle, j'aurais voulu prendre une leçon particulière avec anne laurencin " JCD





  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 .


piregwan (agent mad fanatique lvl 1 - )
47 ans (chamb�ry, 73)
krakoukas@piregwan-genesis.com | 91327470
http://www.piregwan-genesis.com

" s'il vous plait mademoiselle, j'aurais voulu prendre une leçon particulière avec anne laurencin " JCD





  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

R-Matou (anacoluthe hyperbolique lvl 1 - )
47 ans (Namur)
r-matou@bah.be
http://www.bah.be

Gnouf est présent sur internet (et particulièrement Pie)


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.