Alors voici la situation : j'ai un fichier CSV qui ressemble à ceci :
show_id title cast 1 Batman Robert Pattinson, Collin Farrel, Zoë Kravitz 2 Twilight Robert Pattinson, Kristen Stewart 3 Ava Jessica Chastain, Collin Farrel
Ce que je dois faire est d'ouvrir ce fichier CSV dans une fonction Python et d'effectuer quelques traitements sur les espaces, etc.
Je dois ensuite le télécharger dans une base de données SQL (tout ce que je veux, mais j'ai choisi MySQL), ce qui ne pose aucun problème.
Question
Mon principal problème est que je dois ensuite (comme mon défi l'exige) créer une requête qui compte le nombre de fois qu'un acteur apparaît dans tous les films d'une liste. Donc, dans ce cas, la requête devrait ressembler à ceci :
演员 电影数量 Robert Pattinson 2 Collin Farrel 2 Zoë Kravitz 1 Kristen Stewart 1 Jessica Chastain 1
Comme vous pouvez le voir, je n'ai pas de nom que je puisse rechercher avec LIKE ou CONTAINS. Donc qu'est ce que je devrais faire? Parce que dans le CSV, la liste des acteurs de chaque film comporte plus d'un acteur et que je les enregistre dans un type varchar ou texte dans la base de données, j'ai plusieurs acteurs par ligne.
Ou dois-je créer une autre table avec des clés étrangères pour relier les acteurs et les films ? Ou n'est-il pas possible de le faire dans MySQL, mais peut-être possible dans d'autres SQL ?
Si vous recherchez quelque chose d'efficace en termes de performances, vous devez diviser les données (créer 3 tables au total - Films, Acteurs, Crédits) et utiliser Cast et Crédits pour connecter les acteurs aux films, puis écrire du SQL simple avec la jointure, comme ci-dessous :
Vous pouvez également le faire d'une autre manière en utilisant https://sebhastian.com/mysql-split-string/ou en utilisant psql/plsql et des procédures stockées. Je diviserais simplement les données si possible.
Bravo.