Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Alternatywa dla klauzuli LIKE w 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

w każdym razie lepiej zrefaktoryzować schemat, dodając tabelę kategorii i odniesienie do niej w tabeli produktów (głównej)

EDYTUJ

innym sposobem na zmierzenie się z tym problemem jest użycie REGEXP co doprowadzi do krótszego WHERE klauzula (oto, co testowałem):

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;

to będzie pasować do Twojego prod_catg względem wyrażenia regularnego '^1,.*|.*,1$|.*,1,.*' returnig 1 (TRUE) jeśli pasuje, 0 (FALSE) inaczej.

Wtedy Twoja klauzula WHERE będzie wyglądać tak:

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

wyjaśnienie wyrażenia regularnego:

^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

jestem pewien, że to wyrażenie regularne może być znacznie bardziej zwarte, ale nie jestem tak dobry z wyrażeniami regularnymi

oczywiście możesz zmienić szukaną kategorię w wyrażeniu regularnym (spróbuj zastąpić 1 z 7 na powyższym przykładzie)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Klucz MySQL UNIQUE nie działa

  2. Mysql nie może się połączyć - Odmowa dostępu (przy użyciu hasła tak)

  3. Wielokolumnowy klucz podstawowy MySQL

  4. Jak usunąć końcowe białe znaki w MySQL?

  5. jak przesłać więcej niż jeden obraz na serwer (baza danych mysql) za pomocą php i androida