Zunächst einmal ist es quote
nicht Quote
. Zweitens sollten Sie quoteName()
verwenden für Namen von Feldern. Drittens gibt es keinen Grund, die API nicht mehr zu verwenden, nur weil Sie eine Unterabfrage haben. Außerdem ist Ihr Code sehr verwirrend, was der Feldname und was der Wert ist. Ich nehme an, dass $sf_value
stellt den Wert dar, den Sie zuzuordnen versuchen, und adcfvc.field
ist der Name des Felds, in dem die Daten gespeichert sind, die Sie abgleichen möchten.
Ersetzen Sie
AND ' . $db->Quote(JString::strtolower($sf_value)) . ' = adcfvc.field_value
mit
AND ' . $db->quoteName( 'adcfvc.field_value' ) . ' LIKE ' . $db->quote('%' . JString::strtolower($sf_value) . '%')
Ich bin mir nicht sicher, warum Sie dort JString verwenden, aber wenn Sie der Meinung sind, dass es notwendig ist, dann in Ordnung.
Hier ist Ihre Unterabfrage
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
Sie haben also $db
schon.
$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) . '%')) ;
Dann in der Abfrage der obersten Ebene, von der Sie uns gerade einen Teil gezeigt haben, so etwas wie
$query->where('p.id IN (' . $subquery . ')' );