Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Kueri SQL untuk mencocokkan string yang dipisahkan koma dengan string yang dipisahkan koma?

Tidak praktis untuk mencocokkan nilai apa pun dalam string yang dipisahkan koma dengan nilai apa pun dalam string yang dipisahkan koma lainnya dalam satu predikat.

Anda dapat menggunakan FIND_IN_SET() untuk mencari satu nilai pada satu waktu.

Ini berarti Anda memerlukan beberapa predikat, satu untuk setiap nilai yang Anda dapatkan dengan membagi input Anda $subsector_text . Jadi pisahkan variabel Anda dan petakan ke dalam serangkaian panggilan FIND_IN_SET().

Saya belum menguji kode berikut, tetapi seharusnya memberi Anda gambaran tentang apa yang saya bicarakan:

$subsector_array = array_map('intval', explode(',', $subsector_text));
$subsector_terms = array_map(
  function ($id) { return "FIND_IN_SET($id, a.subsector)"; },
  $subsector_array);
$subsector_expr = implode(' OR ', $subsector_terms);

$sql = "
SELECT ...
          WHERE a.state = 1 
            AND a.sector = '$sector'
            AND ($subsector_expr)
...";

Ini tentu saja akan memaksa pemindaian tabel karena tidak ada cara untuk mengindeks FIND_IN_SET(), atau operasi lain apa pun yang mencari substring. Yah, saya kira kondisi Anda di a.state dan a.sector akan menggunakan indeks untuk mempersempit pencarian sebelum menerapkan kondisi FIND_IN_SET().

Saya memahami dilema karena harus bekerja dengan sistem yang Anda warisi. Beri tahu manajer Anda bahwa ini perlu difaktorkan ulang di beberapa titik, karena tidak akan pernah efisien atau dapat diandalkan seperti yang dirancang sekarang.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tambahkan beberapa baris hanya dalam satu baris dari satu tabel

  2. Menggunakan backquote/backticks untuk kueri mysql

  3. SQL Masukkan data dari beberapa tabel di database yang berbeda

  4. Masukkan Path file dengan \\ di mysql menggunakan java

  5. MySQL - Apa perbedaan antara GROUP BY dan DISTINCT?