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

Alternatif untuk klausa LIKE di Mysql

prod_catg LIKE '1,%' --matches when 1 is the first category
OR prod_catg LIKE '%,1,%' --matches when 1 is somewhere in the middle
OR prod_catg LIKE '%,1' --matches 1 when is the last category

bagaimanapun Anda sebaiknya memfaktorkan ulang skema Anda dengan menambahkan tabel kategori dan referensi ke tabel produk (utama)

EDIT

cara lain untuk menghadapi masalah ini adalah menggunakan REGEXP yang akan mengarah ke WHERE yang lebih pendek klausa (inilah yang saya gunakan untuk menguji):

DECLARE @regexp VARCHAR(100);
SET @regexp = '^1,.*|.*,1$|.*,1,.*';

SELECT
    '1,11,15,51,22,31' REGEXP @regexp AS test1,
    '51,11,15,1,22,31' REGEXP @regexp AS test2,
    '11,15,51,22,31,1' REGEXP @regexp AS test3,
    '7,11,15,51,22,31' REGEXP @regexp AS test4,
    '51,11,15,7,22,31' REGEXP @regexp AS test5,
    '11,15,51,22,31,7' REGEXP @regexp AS test6;

ini akan cocok dengan prod_catg Anda terhadap Ekspresi Reguler '^1,.*|.*,1$|.*,1,.*' returnig 1 (TRUE) jika cocok, 0 (FALSE) sebaliknya.

Maka klausa WHERE Anda akan terlihat seperti:

WHERE prod_catg REGEXP '^1,.*|.*,1$|.*,1,.*'

penjelasan regexp:

^1,.* --matches 1 at the beginning of a string followed by a `,` and any other char
.*,1$ --matches 1 at the end of a string preceded by a `,` and any other char
.*,1,.* --matches 1 between two `,` which are sourrounded by any other chars
| --is the OR operator

saya yakin regexp ini bisa jauh lebih ringkas tetapi saya tidak begitu bagus dengan ekspresi reguler

jelas Anda dapat mengubah kategori yang Anda cari dalam ekspresi reguler (coba ganti 1 dengan 7 pada contoh di atas)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana cara menghapus baris data dari tabel mysql secara otomatis dengan 24 jam setelah data masuk ke tabel?

  2. Kesalahan 2002 Koneksi ditolak pada PHP yang terhubung ke MySQL yang berjalan di MAMP

  3. sql berbeda, mendapatkan 2 kolom

  4. menampilkan semua catatan dari satu tabel dan mencocokkan catatan dari yang lain

  5. Membuang kueri SQL ke layar di Laravel