Heim  >  Fragen und Antworten  >  Hauptteil

Methode zum Zählen doppelter Namen in der Varchar/Text-Spalte in MySQL/Any SQL

So, hier ist die Situation: Ich habe eine CSV-Datei, die so aussieht:

show_id   title      cast
1         Batman     Robert Pattinson, Collin Farrel, Zoë Kravitz
2         Twilight   Robert Pattinson, Kristen Stewart
3         Ava        Jessica Chastain, Collin Farrel

Was ich tun muss, ist, diese CSV-Datei in einer Python-Funktion zu öffnen und Leerzeichen usw. zu verarbeiten.

Ich muss es dann in eine SQL-Datenbank hochladen (was ich will, aber ich habe mich für MySQL entschieden), was kein Problem ist.

Frage

Mein Hauptproblem besteht darin, dass ich dann (wie es meine Herausforderung erfordert) eine Abfrage erstellen muss, die zählt, wie oft ein Schauspieler in allen Filmen einer Liste vorkommt. In diesem Fall sollte die Abfrage also so aussehen:

演员               电影数量
Robert Pattinson    2
Collin Farrel       2
Zoë Kravitz         1
Kristen Stewart     1
Jessica Chastain    1

Wie Sie sehen, habe ich keinen Namen, den ich mit LIKE oder CONTAINS suchen kann. Also was soll ich tun? Da in der CSV-Datei die Besetzungsliste für jeden Film mehr als einen Schauspieler enthält und ich sie in einem Varchar- oder Texttyp in der Datenbank speichere, habe ich mehrere Schauspieler pro Zeile.

Oder sollte ich eine weitere Tabelle mit Fremdschlüsseln erstellen, um Schauspieler und Filme in Beziehung zu setzen? Oder ist dies in MySQL nicht möglich, aber vielleicht in anderen SQLs?

P粉464113078P粉464113078405 Tage vor543

Antworte allen(1)Ich werde antworten

  • P粉080643975

    P粉0806439752023-09-11 16:09:29

    如果您正在寻找性能高效的东西,您应该将数据分割(总共创建3个表 - 电影,演员,演职员),并使用演职员将演员与电影连接起来,然后编写一些带有连接的简单SQL,如下所示:

    Select actors.name as Actor, count(movies.title) as Amount_of_movies from actors,
    inner join cast on cast.actor_id = actors.actor_id
    inner join movies on movies.movie_id = cast.movie_id;
    

    您还可以使用https://sebhastian.com/mysql-split-string/或使用psql / plsql和存储过程来完成另一种方式。如果可能的话,我会只是将数据分割。

    干杯。

    Antwort
    0
  • StornierenAntwort