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 . ')' );