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

SQL заявка за съпоставяне на низ, разделен със запетая, срещу низ, разделен със запетая?

Не е практично да се сравнява която и да е стойност в низ, разделен със запетая, срещу която и да е стойност в друг низ, разделен със запетая, в един предикат.

Можете да използвате FIND_IN_SET() за търсене на една стойност наведнъж.

Това означава, че имате нужда от множество предикати, по един за всяка стойност, която получавате чрез разделяне на входа $subsector_text . Така че разделете вашата променлива и я съпоставете в поредица от FIND_IN_SET() извиквания.

Не съм тествал следния код, но трябва да ви даде представа за какво говоря:

$subsector_array = array_map('intval', explode(',', $subsector_text));
$subsector_terms = array_map(
  function ($id) { return "FIND_IN_SET($id, a.subsector)"; },
  $subsector_array);
$subsector_expr = implode(' OR ', $subsector_terms);

$sql = "
SELECT ...
          WHERE a.state = 1 
            AND a.sector = '$sector'
            AND ($subsector_expr)
...";

Това разбира се ще наложи сканиране на таблица, защото няма начин да се индексира FIND_IN_SET() или друга операция, която търси поднизове. Е, предполагам вашите условия за a.state и a.sector ще използва индекс, за да стесни търсенето, преди да приложи условията на FIND_IN_SET().

Разбирам дилемата да работите със система, която сте наследили. Уведомете вашия мениджър, че това трябва да бъде преработено в даден момент, защото никога няма да бъде ефективно или надеждно по начина, по който е проектирано сега.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. JSON показва грешка 403, докато се опитва да извлече данни от база данни в android

  2. Java, MySQL:Има ли начин да се вгради MySQL сървър с програма на Java?

  3. Извикване на MySQL Съхранена процедура от .NET DB Контекст хвърля Само обекти MySqlParameter могат да бъдат съхранени'

  4. Бройте с условие IF в MySQL заявка

  5. MySQL избира конкретен запис от таблица, която не е в друга таблица