{MySQL} Demande d'aide pour updater une table

Fermé
LeGhe - 25 déc. 2009 à 18:48
moderno31 Messages postés 870 Date d'inscription mardi 23 juin 2009 Statut Membre Dernière intervention 8 août 2012 - 26 déc. 2009 à 15:09
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 870 Date d'inscription mardi 23 juin 2009 Statut Membre Dernière intervention 8 août 2012 92
26 déc. 2009 à 15:09
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