sql >> Databáze >  >> RDS >> Mysql

Jak zkombinovat LIKE s IN v dotazu MYSQL?

Především je to quote ne Quote .Zadruhé byste měli použít quoteName() pro názvy polí. Za třetí, není důvod přestat používat API jen proto, že máte poddotaz. Také váš kód je velmi matoucí ohledně toho, co je název pole a která hodnota. Předpokládám, že $sf_value představuje hodnotu, kterou se pokoušíte porovnat, a adcfvc.field je název pole, ve kterém jsou uložena data, která se pokoušíte porovnat.

Nahradit

 AND ' . $db->Quote(JString::strtolower($sf_value)) . ' = adcfvc.field_value

s

 AND ' .  $db->quoteName( 'adcfvc.field_value' ) . ' LIKE  ' .  $db->quote('%' . JString::strtolower($sf_value) . '%') 

Nejsem si jistý, proč tam používáte JString, ale pokud máte pocit, že je to nutné, pak v pořádku.

Zde je váš dílčí dotaz

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

Takže vy, protože máte $db již.

$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) . '%')) ;

Pak v dotazu nejvyšší úrovně, jehož jednu část jste nám právě ukázali, něco jako

$query->where('p.id IN (' . $subquery . ')' );


  1. jak načíst obrázek z databáze mysql pomocí java servletu a zobrazit jej v HTML img tagu?

  2. Jak provést úplné vnější spojení v MySQL

  3. Spouštěcí smyčka serveru SQL Server

  4. Jedna nebo více databází na kontejner Docker