Bonsoir à tous, Je ne sais si c'est possible en une seule requette , je vous expose mon probleme;
En partant du principe que je possede 3 tables:
une table: books
une table: users
une table de liaison: books_users
la table books_users se decompose comme ceci:
(int)books_id, (int)users_id, (boolean) possede
Je veux recuperer tous les titres de livres que possede jean (id=1)
SELECT titre FROM books b
INNER JOIN books_users bu ON bu.books_id = b.id
WHERE bu.users_id = 1
AND bu.possede = 1
Jusque là, pas de probleme, la ou ca se complique et ou je ne trouve pas la solution, c'est si je veux afficher tous les livres que possede jean avec en mm temps pour chaque livre recupere, l'info si eric(id=2) possede ce livre.
Merci d'avance pour vos lanternes
Dans ton cas tu peux faire une jointure externe
SELECT * FROM books b
INNER JOIN books_users bu ON bu.books_id = b.id
LEFT JOIN books_users bu2 ON bu2.books_id = b.id and bu2.users_id = 2
WHERE bu.users_id = 1
Ainsi tu va récupérer tous les livres que possède le user avec l'id 1
Si le user avec l'id 2 possède le livre bu2.id sera différent de null.
Ps : A quoi sert le champ possède ?
Génial, tu m'as mis sur la voie, me doutais bien qu'il fallait que je passe par une jointure, le pire c'est que je l'ai mis dans le titre, en fait j'ignorais que l'on pouvais faire de multiples jointure sur la mm table et que l'on pouvais lui mettre des clauses
Ce qui donnerai donc pour mon exemple:
SELECT b.titre, bu2.* FROM books b
INNER JOIN books_users bu ON bu.books_id = b.id
LEFT JOIN books_users bu2 ON bu2.books_id = b.id and bu2.users_id = 2
WHERE bu.users_id = 1
AND bu.possede = 1
et pour répondre a ta question, la table de liaison est une table de liaison généraliste, c'est a dire que je peux gerer l'interaction entre mes deux tables sur un seul enregistrement, et lui notifier plusieurs actions; posseder lu bruler preter etc
En te remerciant