[RESOLU] Deux requetes sur une meme base de donnees en meme temps

Eléphanteau du PHP | 18 Messages

20 mai 2016, 04:10

Bonjour à tous,

Je suis la conception d'un site d'une maison d'édition.

Les livres sont écrits pas des auteurs, et parfois ils ont un co-auteur mais pas toujours.

Comment je fais pour aller cherche le nom et prenom des deux auteurs si tel est le cas.

Les livres sont classes par ISBN comme clé primaire.

Les auteurs ont un id_auteur unique propre à eux, le nom est le prenom sont dans la base de données membres.

Voici ma requête actuelle que j'aimerais mettre à jour. Aussi il est à noté que lorsque un auteur n'a pas de co-auteur, ce dernier est NULL dans la base de données.

Code : Tout sélectionner

$req_livre = "SELECT l.*, m.nom, m.prenom, m.email , c.nom_categorie FROM livres l INNER JOIN membres m ON l.id_auteur = m.id_auteur INNER JOIN categories c ON l.id_categorie = c.id_categorie WHERE l.isbn = '" . $isbn . "'";
Si vous croyez que ma requête mérite d'être optimisé, n'hésitez pas à m'en faire part.

Merci à tous pour votre aide.
Sylvain

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

09 juin 2016, 12:34

salut,

sans la structure de la table c'est difficile de d'être certain que je dis.
Mais d'après ton message tu as une colonne "id_coauteur " ?
si oui il te faut une autre jointure sur membres pour générer cela
SELECT l.*, m.nom, m.prenom auteurNom, m.email  auteurMail, c.nom_categorie ,m2.prenom coauteurNom, m2.email coauteurMail
               FROM livres l
               INNER JOIN membres m using(id_auteur)
               INNER JOIN membres m2 ON l.id_coauteur = m.id_auteur
               INNER JOIN categories c using(id_categorie)
               WHERE l.isbn = 'xxx'
Si cette réponse est la bonne je t'invite à modifier ton modèle de données.
tu dois avoir une table de "liaison" entre livres et auteurs.
Pourquoi ?
Parce que cela permet de gérer simplement le nombre d'auteur une seule fois et sans problème.
cette table (disont auteurs) contient juste les clef primaire des deux tables (isbn et id_auteur).
Pour alimenter la liste des auteur un select "relativement simple"
select nom, prenom, email from membres where id_auteur in ( select id_auteur from auteurs where isbn='xxxx');
Par contre tu n'auras pas tout en une requête.
Au passage la table membre avec un id_auteur me fait dire que cette table est mal nommé ;)

@+
Il en faut peu pour être heureux ......

Eléphanteau du PHP | 18 Messages

13 juin 2016, 02:15

Merci pour la réponse.

Entre temps j'ai trouvé, un INNER JOIN doit être vrai pour retourner un résultat, donc le champ ne doit pas être NULL si je veux que le INNER JOIN fonctionne je me trompe ?
J'ai utilisé un RIGHT JOIN à la place, donc je recois un résultat peu importe si j'ai un co-auteur ou pas.

Sylvain