Pertanyaan MySQL: Apa versi terbalik dari LIKE?


SEPERTI operator di MySql digunakan untuk menemukan baris yang berisi teks permintaan kami, misalnya:

select name from user where name like "%john%"

yang akan kembali John Smith, Peter Johnson dll.

Bagaimana jika saya membutuhkan yang sebaliknya - untuk menemukan baris yang TERCANTUM dalam teks permintaan kami? Misalnya saya berikan John Smith and Peter Johnson are best friends dan ingin menemukan saya semua nama dari tabel yang dapat ditemukan dalam string ini.

Bagaimana cara melakukannya?


32
2018-01-23 06:23


asal


Jawaban:


Inilah cara Anda mencapai apa yang Anda gambarkan:

SELECT name FROM user 
WHERE 'John Smith and Peter Johnson are best friends' LIKE
  CONCAT('%', name, '%')

46
2018-01-23 06:58



select name
from users
where instr('John Smith and Peter Johnson', name) > 0

Saya lebih suka menggunakan metode ini daripada:

select *
from users
WHERE  'John Smith and Peter Johnson' LIKE CONCAT('%', name ,'%')

karena jika ada kemungkinan bahwa name bisa berisi % atau _ karakter (mis. nama = 'v% alue') maka pertanyaan di atas masih akan mengembalikan catatan itu secara tidak benar. Perhatikan juga bahwa jika kolom Anda dapat berisi backslashes dan / atau "C melarikan diri karakter"Maka mereka juga harus lolos. Ini semua dijelaskan dalam Fungsi Perbandingan String MySQL. Misalnya di bawah ini SQL akan mengembalikan 1:

SELECT 'val\%ue' LIKE CONCAT('%', 'al\\\\\%u' ,'%');

Backslash tunggal harus dilepas \\\\ dan % karakter terhindar: \%.


1
2018-03-24 04:00



Ini adalah masalah pengindeksan teks. Jika saya melakukannya dengan benar, tugas Anda adalah menemukan semua referensi kepada orang-orang dalam teks bentuk bebas, dan tidak ada hubungannya dengan LIKE or NOT LIKE.

Dalam bentuk umum, tabel database yang Anda cari referensi bertindak sebagai kamus untuk beberapa algoritma pengindeksan teks. Buat indeks pada string input menggunakan kamus ini dan semoga Anda akan mendapatkan beberapa kecocokan.


-2
2018-01-23 06:55