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

Bagaimana cara menggabungkan LIKE dengan IN dalam kueri MYSQL?

Pertama-tama itu quote bukan Quote .Kedua Anda harus menggunakan quoteName() untuk nama bidang. Ketiga, tidak ada alasan untuk berhenti menggunakan API hanya karena Anda memiliki subkueri. Juga kode Anda sangat membingungkan tentang mana nama bidang dan mana nilainya. Saya berasumsi bahwa $sf_value mewakili nilai yang Anda coba cocokkan dan adcfvc.field adalah nama bidang yang menyimpan data yang Anda coba cocokkan.

Ganti

 AND ' . $db->Quote(JString::strtolower($sf_value)) . ' = adcfvc.field_value

dengan

 AND ' .  $db->quoteName( 'adcfvc.field_value' ) . ' LIKE  ' .  $db->quote('%' . JString::strtolower($sf_value) . '%') 

Saya tidak yakin mengapa Anda menggunakan JString di sana tetapi jika Anda merasa perlu, tidak apa-apa.

Ini subkueri Anda

SELECT adcfvc.advert_id
  FROM #__koparent_advert_specific_fields_values AS adcfvc
 WHERE adcfvc.advert_id = p.id
   AND adcfvc.field_name = ' . $db->Quote($sf_key) . '
   AND ' . $db->Quote(JString::strtolower($sf_value)) . ' = adcfvc.field_value

Jadi Anda karena Anda memiliki $db sudah.

$subquery = $db->getQuery(true); 
// Assuming p.id is an integer
$subquery->where($db->quoteName(adcfvc.advert_id) = p.id)
//Assuming $sf_key is an integer
->where($db->quoteName(adcfvc.field_name) . ' = ' . $sf_key)
->where($db->quoteName(adcfvc.field_value) . ' LIKE ' 
    .   $db->Quote('%'. JString::strtolower($sf_value) . '%')) ;

Kemudian di kueri tingkat atas, yang baru saja Anda tunjukkan kepada kami salah satu bagiannya, seperti

$query->where('p.id IN (' . $subquery . ')' );


  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 masuk ke MySQL sebagai pengguna yang berbeda?

  2. Saya tidak dapat menemukan my.cnf di komputer windows saya

  3. Haruskah kunci utama basis data berupa bilangan bulat?

  4. Menyimpan Alamat IPv6 di MySQL

  5. Mysql Gabung 2 tabel dan pilih nilai maksimum dan minimum antara rentang tanggal