PHPMyAdmin Совпадение строк с двумя или более строками - PullRequest
0 голосов
/ 11 мая 2018

У меня огромная база данных, и внутри этой базы данных я хочу найти строки из столбца 'title', которые не содержат слов "GmbH", "GbR", "e.K." и т. Д.

Я пробовал это:

SELECT * FROM `listings` WHERE `listings`.`title` NOT LIKE '%GmbH' AND `listings`.`email_allow`=0

это работает, но это показывает мне все остальные строки с этими другими словами, так как я могу написать один запрос, который показывает мне только строки, которые не содержат эти слова.

Эти запросы не увенчались успехом:

   1. SELECT * FROM `listings` WHERE `listings`.`title` NOT LIKE '%GmbH' OR '%GbR' OR '%AG' AND `listings`.`email_allow`=0
   2. SELECT * FROM `listings` WHERE `listings`.`title` NOT LIKE ('%GmbH' OR '%GbR' OR '%AG') AND `listings`.`email_allow`=0
   3. SELECT * FROM `listings` WHERE (`listings`.`title` NOT LIKE '%GmbH' OR '%GbR' OR '%AG') AND `listings`.`email_allow`=0

1 Ответ

0 голосов
/ 11 мая 2018

Вам нужно повторить NOT LIKE:

SELECT l.*
FROM `listings` l
WHERE l.title NOT LIKE '%GmbH' AND
      l.title NOT LIKE '%GbR' AND
      l.title NOT LIKE '%AG' AND
      l.email_allow = 0;

Возможно, вы захотите рассмотреть полнотекстовый индекс, если у вас есть такие запросы.LIKE может быть довольно дорого.

Вы также можете сделать это с помощью регулярных выражений:

SELECT l.*
FROM `listings` l
WHERE l.title NOT REGEXP '(GmbH|GbR|AG)$' AND
      l.email_allow = 0;

Регулярные выражения не обязательно будут быстрее, но они более кратки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...