{MySQL} Demande d'aide pour updater une table

LeGhe -  
moderno31 Messages postés 872 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

Je crée une base de données de librairie.
Mon logiciel de saisie de livres génère une base SQL, avec une table BookxAuthor notamment qui croise l'ID d'un livre avec les ID des auteurs, sous forme :
BookID AuthorID
3107 1159
3135 1163
3135 1175

Le livre 3107 a un auteur, le 1159
Le livre 3135 a 2 auteurs, les 1163 et 1175

De là, il faut que j'exporte vers une autre table "Book" ces éléments, entre autres.

J'utilise donc la requête suivante :
ALTER TABLE book ADD auteurID INT;
UPDATE book, bookxauthor
SET book.`auteurID`=bookxauthor.AuthorID
WHERE book.ID=bookxauthor.BookID;

Qui me donne dans la table Book :
ID auteurID Titre Description etc...
3107 1159 Blabla Blablabla etc...
3135 1163 Blabla Blablabla etc...

Qui fonctionne parfaitement lorsqu'il n'y a qu'un seul auteur. Quand il y en a plus, la requête zappe simplement les auteurs suivants.

Comment créer un champ conditionnel auteurID2 lorsque cela est nécessaire ?
ID auteurID auteurID2 Titre Description etc...
3107 1159 NULL Blabla Blablabla etc...
3135 1163 1175 Blabla Blablabla etc...

Merci de vore aide !!
A voir également:

1 réponse

moderno31 Messages postés 872 Date d'inscription   Statut Membre Dernière intervention   92
 
Si tu veux créer des conditions dans tes requetes tu peux faire appel à un CASE WHEN...
ex :
Client_Auth : Authentification Client
CASE WHEN `Client_Auth` = 0 THEN 'Non' ELSE 'Oui' END AS ins_auth

Tu peux mettre CASE WHEN champTruc IS NULL ou champTruc = 0 ou champTruc In(4,5)...comme tu veux
https://www.php.net/manual/fr/function.is-null.php

Essaye plutot de faire
UPDATE book,
LEFT JOIN bookxauthor ON bookxauthor.BookID = book.ID
SET book.`auteurID`=bookxauthor.AuthorID

A la fin de ta ligne LEFT tu peux ajouter une clause AND pour filrer les lignes remontées via la jointure
0