Php 很好,但只返回前面提到的精确匹配。我知道你可能想建议一个更好的改进结构,完全欢迎。你能编辑一下你的答案并告诉我要替换什么吗?这将使我更容易理解和应用。这段代码是Joomla 3.4上一个非常大的组件的一部分。但是,您可以在123dizajn.com/bol

Php 很好,但只返回前面提到的精确匹配。我知道你可能想建议一个更好的改进结构,完全欢迎。你能编辑一下你的答案并告诉我要替换什么吗?这将使我更容易理解和应用。这段代码是Joomla 3.4上一个非常大的组件的一部分。但是,您可以在123dizajn.com/bol,php,mysql,joomla,sql-like,Php,Mysql,Joomla,Sql Like,很好,但只返回前面提到的精确匹配。我知道你可能想建议一个更好的改进结构,完全欢迎。你能编辑一下你的答案并告诉我要替换什么吗?这将使我更容易理解和应用。这段代码是Joomla 3.4上一个非常大的组件的一部分。但是,您可以在123dizajn.com/boltours/en/contact上检查输出,并使用左上角的搜索字段。为了理解我的意思,搜索“Katarina 1公寓A2”,你会得到一个结果,但如果你只搜索“Katarina”,你不会得到任何结果!虽然你的假设是正确的,但我也尝试了你的建议,但


很好,但只返回前面提到的精确匹配。我知道你可能想建议一个更好的改进结构,完全欢迎。你能编辑一下你的答案并告诉我要替换什么吗?这将使我更容易理解和应用。这段代码是Joomla 3.4上一个非常大的组件的一部分。但是,您可以在123dizajn.com/boltours/en/contact上检查输出,并使用左上角的搜索字段。为了理解我的意思,搜索“Katarina 1公寓A2”,你会得到一个结果,但如果你只搜索“Katarina”,你不会得到任何结果!虽然你的假设是正确的,但我也尝试了你的建议,但它只是一张白纸!最后,我知道我发布的这段代码有点混乱。让我知道你的想法,然后我会更新它,让你再次检查。感谢帮助。将错误报告转为开发。你为什么不做一个finder插件呢?添加
echo$query->dump()完成生成查询后。您确定您的查询在PHPMyAdmin中有效吗?另外,请更新问题,以显示从定义
$db
开始的整个查询。您应该阅读有关如何使用Joomla api执行子查询的链接。我没有尝试在PHPMyAdmin中执行相同的代码,但在功能方面效果非常好,我的问题是它提供了精确匹配,我需要一个通配符匹配“%…%”。我已按要求为整个文件添加了一个链接。感谢您的帮助。@MKhalidJunaid您关于反向逻辑查找的建议对解决此问题非常有帮助;然而,作为一个新的边界不能让我投票支持它。@mk97@Elin你的回答和评论也对我很有帮助。但是你不能像
那样去想;谢谢。@Elin你看到我的决议了吗?它没有做任何进一步的修改就解决了这个问题。
$where[] = 'p.id IN (
    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
)';
= adcfvc.field_value
LIKE %adcfvc.field_value%
$where[] = 'p.id IN (
    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
         (adcfvc.field_value > ' . $db->Quote(JString::strtolower($sf_value)) . '
         OR adcfvc.field_value < ' . $db->Quote(JString::strtolower($sf_value)) . '
         OR adcfvc.field_value = ' . $db->Quote(JString::strtolower($sf_value)) . ')
)';
$where[] = 'p.id IN (
    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 adcfvc.field_value LIKE %' . $db->Quote(JString::strtolower($sf_value)) . '%
)';
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 'Hello my people'  like concat('%',adcfvc.field_value,'%')
order by adcfvc.field_value like '%Hello my people%' desc
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  (
  adcfvc.field_value like '%Hello my people%'
  or adcfvc.field_value like '%Hello%'
  or adcfvc.field_value like '%my%'
  or adcfvc.field_value like '%people%'
)
order by adcfvc.field_value like '%Hello my people%' desc
 AND ' . $db->Quote(JString::strtolower($sf_value)) . ' = adcfvc.field_value
 AND ' .  $db->quoteName( 'adcfvc.field_value' ) . ' LIKE  ' .  $db->quote('%' . JString::strtolower($sf_value) . '%') 
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
$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 . ')' );
$where[] = 'p.id IN (
    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 adcfvc.field_value RLIKE ' . $db->Quote(JString::strtolower($sf_value)) . '
)';