Først og fremmest er det quote
ikke Quote
.For det andet skal du bruge quoteName()
for navne på felter. For det tredje er der ingen grund til at stoppe med at bruge API, bare fordi du har en underforespørgsel. Din kode er også meget forvirrende med hensyn til, hvad der er feltnavnet, og hvad der er værdien. Jeg antager, at $sf_value
repræsenterer den værdi, du forsøger at matche, og adcfvc.field
er navnet på det felt, der gemmer de data, du forsøger at matche.
Udskift
AND ' . $db->Quote(JString::strtolower($sf_value)) . ' = adcfvc.field_value
med
AND ' . $db->quoteName( 'adcfvc.field_value' ) . ' LIKE ' . $db->quote('%' . JString::strtolower($sf_value) . '%')
Jeg er ikke sikker på, hvorfor du bruger JString der, men hvis du føler, det er nødvendigt, så er det fint.
Her er din underforespørgsel
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
Så du, da du har $db
allerede.
$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) . '%')) ;
Så i forespørgslen på øverste niveau, som du lige har vist os en del af, noget som
$query->where('p.id IN (' . $subquery . ')' );