Mysql
 sql >> база данни >  >> RDS >> Mysql

Как да комбинирам LIKE с IN в MYSQL заявка?

На първо място това е quote не Quote .На второ място трябва да използвате quoteName() за имена на полета. Трето, няма причина да спрете да използвате API само защото имате подзаявка. Също така кодът ви е много объркващ относно това кое е името на полето и кое е стойността. Предполагам, че $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 . ')' );


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL добри ли са моите индекси?

  2. MySQL и NoSQL:Помогнете ми да избера правилния

  3. Как да разрешим грешка в без заявка в четеца на данни?

  4. Въпрос на изявление на MYSQL if

  5. Еквивалент на explode() за работа с низове в MySQL