sql >> Database >  >> RDS >> Mysql

Hoe combineer je LIKE met IN in een MYSQL-query?

Allereerst is het quote niet Quote .Ten tweede moet u quoteName() . gebruiken voor namen van velden. Ten derde is er geen reden om te stoppen met het gebruik van de API alleen omdat je een subquery hebt. Ook is je code erg verwarrend over wat de veldnaam is en wat de waarde is. Ik neem aan dat $sf_value staat voor de waarde die u probeert te matchen en adcfvc.field is de naam van het veld waarin de gegevens worden opgeslagen die u probeert te matchen.

Vervang

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

met

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

Ik weet niet zeker waarom je JString daar gebruikt, maar als je denkt dat het nodig is, prima.

Hier is uw subquery

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

Dus jij, aangezien je $db . hebt al.

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

Dan in de zoekopdracht op het hoogste niveau, waarvan u ons zojuist een deel hebt laten zien, zoiets als

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


  1. Als er een manier is waarop ik een MS Sql-tabel in één query kan toevoegen aan een MySql-tabel met behulp van MySql?

  2. CodeIgniter-fout - kan geen verbinding maken met de database met behulp van de opgegeven instellingen

  3. Een juiste manier om een ​​tijdzone op te slaan in een database?

  4. Hoe genereer ik in SQL Server een CREATE TABLE-instructie voor een bepaalde tabel?