J'ai 3 tables dans ma base de données MySQL:Obtenir les discussions liées aux tags
- la table Threads (id, titre)
- la table Tags (id, nom)
- les ThreadTags de tableau croisé dynamique (tagID, threadID)
Admettons que je possède déjà les ID de balises dans le tableau $ tagIDs, maintenant je veux que tous les threads soient liés à TOUS ces balises. Ma solution actuelle est quelque chose comme ça:
$stmt = 'SELECT id, title FROM Threads'."\n";
foreach($tagIDs as $id) {
$stmt .= 'INNER JOIN ThreadTags T1 ON (T1.threadID = Thread.id AND T1.tagID = '.$id.')'."\n";
}
Et un certain nombre de balises ajouter une autre INNER JOIN
à cette table.
Y a-t-il un meilleur moyen?
NB: s'il vous plaît, pas de réponse comme « utiliser une base de données NoSQL », je ne peux pas changer cela, grâce
Ne pas faire ce que je veux, il me donnera tout fil lié à au moins l'une des balises, je ne veux que les discussions liées à tous les tags (précisée dans la question). –
Désolé, je l'ai mal lu. Je ferais probablement comme tu l'as fait. Cependant, si vous souhaitez approfondir ce sujet, vous pouvez peut-être jeter un coup d'œil à la fonction GROUP_CONCAT de mysql: http://dev.mysql.com/doc/refman/5.0/fr/group-by-functions.html#function_group- concat je pense que c'est possible, je vais vérifier dans un peu, si je trouve quelque chose je vais mettre à jour la réponse. – klennepette
Merci. C'est intéressant. Toute idée de la différence de performance? –