Rumah  >  Soal Jawab  >  teks badan

Kaedah untuk mengira nama pendua dalam lajur Varchar/Teks dalam MySQL/Sebarang SQL

Jadi, inilah situasinya: Saya mempunyai fail CSV yang kelihatan seperti ini:

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

Apa yang perlu saya lakukan ialah membuka fail CSV ini dalam fungsi Python dan melakukan beberapa pemprosesan pada ruang dll.

Saya kemudiannya perlu memuat naiknya ke dalam pangkalan data SQL (apa-apa sahaja yang saya mahu, tetapi saya memilih MySQL), yang tidak menjadi masalah.

Soalan

Masalah utama saya ialah saya perlu (kerana cabaran saya memerlukannya) untuk membuat pertanyaan yang mengira bilangan kali pelakon muncul dalam semua filem dalam senarai. Jadi, dalam kes ini, pertanyaan sepatutnya kelihatan seperti ini:

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

Seperti yang anda lihat, saya tidak mempunyai nama yang boleh saya cari dengan LIKE atau CONTAINS. Jadi apa yang perlu saya lakukan? Kerana dalam CSV, senarai pelakon untuk setiap filem mempunyai lebih daripada seorang pelakon, dan saya menyimpannya dalam varchar atau jenis teks dalam pangkalan data, saya mempunyai berbilang pelakon setiap baris.

Atau patutkah saya membuat jadual lain dengan kunci asing untuk mengaitkan pelakon dan filem? Atau adakah tidak mungkin untuk melakukan ini dalam MySQL, tetapi mungkin dalam SQL lain?

P粉464113078P粉464113078405 hari yang lalu539

membalas semua(1)saya akan balas

  • P粉080643975

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

    Jika anda sedang mencari sesuatu yang cekap prestasi, anda harus membahagikan data (buat 3 jadual secara keseluruhan - Filem, Pelakon, Kredit) dan gunakan Cast dan Kredit untuk menghubungkan pelakon dengan filem dan kemudian tulis beberapa SQL mudah dengan gabungan, sebagai ditunjukkan di bawah:

    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;
    

    Anda juga boleh melakukannya dengan cara lain menggunakan https://sebhastian.com/mysql-split-string/atau menggunakan psql/plsql dan prosedur tersimpan. Saya hanya akan membahagikan data jika boleh.

    Sekian.

    balas
    0
  • Batalbalas