सबसे पहले यह है quote
नहीं quote
दूसरा आपको quoteName()
. का इस्तेमाल करना चाहिए फ़ील्ड के नाम के लिए। तीसरा एपीआई का उपयोग बंद करने का कोई कारण नहीं है क्योंकि आपके पास सबक्वायरी है। साथ ही आपका कोड बहुत भ्रमित है कि कौन सा फ़ील्ड नाम है और कौन सा मान है। मुझे लगता है कि $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 . ')' );