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

Алтернатива на клаузата LIKE в Mysql

prod_catg LIKE '1,%' --matches when 1 is the first category
OR prod_catg LIKE '%,1,%' --matches when 1 is somewhere in the middle
OR prod_catg LIKE '%,1' --matches 1 when is the last category

така или иначе е по-добре да преработите схемата си, като добавите таблица с категории и препратка към нея в продуктовата (основната) таблица

РЕДАКТИРАНЕ

друг начин за справяне с този проблем е използването на REGEXP което ще доведе до по-кратък WHERE клауза (ето какво използвах за тестване):

DECLARE @regexp VARCHAR(100);
SET @regexp = '^1,.*|.*,1$|.*,1,.*';

SELECT
    '1,11,15,51,22,31' REGEXP @regexp AS test1,
    '51,11,15,1,22,31' REGEXP @regexp AS test2,
    '11,15,51,22,31,1' REGEXP @regexp AS test3,
    '7,11,15,51,22,31' REGEXP @regexp AS test4,
    '51,11,15,7,22,31' REGEXP @regexp AS test5,
    '11,15,51,22,31,7' REGEXP @regexp AS test6;

това ще съответства на вашия prod_catg срещу регулярния израз '^1,.*|.*,1$|.*,1,.*' returnig 1 (TRUE) ако съвпада, 0 (FALSE) иначе.

Тогава вашата клауза WHERE ще изглежда така:

WHERE prod_catg REGEXP '^1,.*|.*,1$|.*,1,.*'

обяснение на regexp:

^1,.* --matches 1 at the beginning of a string followed by a `,` and any other char
.*,1$ --matches 1 at the end of a string preceded by a `,` and any other char
.*,1,.* --matches 1 between two `,` which are sourrounded by any other chars
| --is the OR operator

Сигурен съм, че този регулярен израз може да бъде много по-компактен, но не съм толкова добър с регулярните изрази

очевидно можете да промените категорията, която търсите в регулярния израз (опитайте да замените 1 с 7 в примера по-горе)



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

  2. Не мога да се свържа с локален MySQL сървър чрез сокет '/var/mysql/mysql.sock' (38)

  3. Оптимизирайте MySQL заявката, за да избегнете Използването на where; Използване на временно; Използване на сортиране на файлове

  4. Най-добри практики за архивиране за MySQL, MariaDB и Galera Cluster

  5. Изучаване на изходния код на MySQL, SQLite, за да научите за внедряването на RDBMS