まず第一に、それはquote
です Quote
ではありません .2番目にquoteName()
を使用する必要があります フィールドの名前について。第3に、サブクエリがあるという理由だけでAPIの使用を停止する理由はありません。また、コードは、フィールド名と値について非常に混乱しています。 $sf_value
だと思います 一致させようとしている値とadcfvc.field
を表します 照合しようとしているデータを格納するフィールドの名前です。
交換
AND ' . $db->Quote(JString::strtolower($sf_value)) . ' = adcfvc.field_value
と
AND ' . $db->quoteName( 'adcfvc.field_value' ) . ' LIKE ' . $db->quote('%' . JString::strtolower($sf_value) . '%')
そこでJStringを使用している理由はわかりませんが、必要だと思われる場合は問題ありません。
これがサブクエリです
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
$db
があるので すでに。
$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) . '%')) ;
次に、その一部を示したトップレベルのクエリで、
$query->where('p.id IN (' . $subquery . ')' );