Trước hết, đó là quote
không phải Quote
Thứ hai, bạn nên sử dụng quoteName()
Thứ ba, không có lý do gì để ngừng sử dụng API chỉ vì bạn có một truy vấn con.Ngoài ra, mã của bạn rất khó hiểu về việc đâu là tên trường và đâu là giá trị. Tôi giả sử rằng $sf_value
đại diện cho giá trị mà bạn đang cố gắng đối sánh và adcfvc.field
là tên của trường lưu trữ dữ liệu mà bạn đang cố gắng đối sánh.
Thay thế
AND ' . $db->Quote(JString::strtolower($sf_value)) . ' = adcfvc.field_value
với
AND ' . $db->quoteName( 'adcfvc.field_value' ) . ' LIKE ' . $db->quote('%' . JString::strtolower($sf_value) . '%')
Tôi không chắc tại sao bạn lại sử dụng JString ở đó nhưng nếu bạn cảm thấy nó cần thiết thì tốt.
Đây là truy vấn con của bạn
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
Vì vậy, bạn vì bạn có $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) . '%')) ;
Sau đó, trong truy vấn cấp cao nhất mà bạn vừa cho chúng tôi thấy một phần của nó, giống như
$query->where('p.id IN (' . $subquery . ')' );