Wow, j'étais à des années-lumières de me douter qu'on pouvait faire plusieurs LEFT JOIN dans une même requête. Merci pour l'astuce.
Par contre, je ne comprends pas bien les variables $auteurs et $auteur. Surtout la $auteurs, en fait.
J'ai essayé de mettre mes deux variables d'auteur différentes dans un array du type
Code :
- $auteurs = array($search_auteur_1,$search_auteur_2);
|
mais la requête ne retourne alors aucun résultat.
Autre point obscur, c'est cette histoire de $compteurAuteur. S'il reste fixe, on n'obtient a priori pas un alias unique, si ? Ou je suis censé le faire varier selon le nombre d'auteurs passés en variable ?
Edit : Suite à ta solution très élégante qui donne une requête très flexible, j'ai très barbarement fait rentrer les deux LEFT JOIN de force. Ca me donne à peu près ça :
Code :
- $query = 'SELECT DISTINCT *tous mes machins*
- FROM livres l
- LEFT JOIN auteurs a1
- ON l.id = a1.bouquin_id
- LEFT JOIN auteurs a2
- ON l.id = a2.bouquin_id
- WHERE l.titre LIKE "%'.$search_titre.'%"
- AND *pas mal d'autres options*
- AND a1.nom LIKE "%'.$search_nom_1.'%"
- AND a2.nom LIKE "%'.$search_nom_2.'%" ';
|
A ne pas reproduire chez soi, ça tache.
Merci encore pour ton aide
Re-Edit : En fait, j'ai un nouveau problème. Imaginons qu'on ait aussi rentré la nationalité de chaque auteur dans la table auteurs. J'aimerais qu'en rentrant $search_nationalite_1 = "français" et $search_nationalite_2 = "français", on n'obtienne que les livres écrits par deux français. D'où le code suivant :
Code :
- SELECT DISTINCT *tous mes machins*
- FROM livres l
- LEFT JOIN auteurs a1
- ON l.id = a1.bouquin_id
- LEFT JOIN auteurs a2
- ON l.id = a2.bouquin_id
- WHERE l.titre LIKE "%'.$search_titre.'%"
- AND *pas mal d'autres options*
- AND a1.nationalite LIKE "%'.$search_nationalite_1.'%"
- AND a2.nationalite LIKE "%'.$search_nationalite_2.'%"
|
Le problème, c'est qu'avec ça, j'obtiens aussi les livres écrits par un seul français. Il faudrait donc que je sépare les résultats trouvés par la requête en a1 et a2 (histoire d'éviter qu'ils n e piochent dans la même ligne), mais je ne vois vraiment pas comment.
Message édité par Brendeldas le 29-05-2010 à 19:35:46
---------------
Plaît-il ?