SQL-запрос не возвращает желаемый результат с NOT LIKE - PullRequest
0 голосов
/ 12 ноября 2018

Я выполняю простой запрос, в котором сравнивается столбец TEXT с использованием NOT LIKE, но результаты не верны.Много пробовал, но не повезло.Вот запрос:

SELECT *
FROM `restaurant_session_log`
WHERE `restId` = '176'
OR branchId = '203'
OR  `multi_vendorId` LIKE '%,176%' 
OR  `multi_vendorId` LIKE '%,176,%' 
OR  `multi_vendorId` LIKE '%176,%' 
OR  `multi_vendorId` LIKE '%[176]%' 
AND (`excluded_branch_id` NOT LIKE '%,203%'  OR `excluded_branch_id` NOT LIKE '%,203,%'  OR `excluded_branch_id` NOT LIKE '%203,%'  OR `excluded_branch_id` NOT LIKE '%[203]%' )

И вот результат: screenshot

Теперь правильный результат будет включать только 2-ю строку, с id = 27707, потому чтоЯ упоминал в запросе, чтобы получить результат, где excluded_branch_id != %203%, но я не понимаю, почему он дает строку с 203 в столбце excluded_branch_id.

Пожалуйста, помогите!

Ответы [ 3 ]

0 голосов
/ 12 ноября 2018

Вы можете использовать REGEXP для упрощения сопоставления.Следующие совпадения 203, если с обеих сторон есть границы слов:

(excluded_branch_id IS NULL OR excluded_branch_id NOT REGEXP '[[:<:]]203[[:>:]]')

Например:

SELECT
    '203,111' REGEXP '[[:<:]]203[[:>:]]', -- 1
    '111,203' REGEXP '[[:<:]]203[[:>:]]', -- 1
    '1,203,1' REGEXP '[[:<:]]203[[:>:]]', -- 1
    '1120311' REGEXP '[[:<:]]203[[:>:]]'  -- 0
0 голосов
/ 12 ноября 2018

$ query = "SELECT * FROM Movies, ГДЕ ВЫПУСКАЕТСЯ ГОД НЕ НРАВИТСЯ '200 _';"

$ result = db_query ($ query, array (': movies' => $ value));

0 голосов
/ 12 ноября 2018

Не храните несколько значений в одной строке! Не помещайте числовые значения в строку! Это коренная причина ваших проблем.

Иногда вы не можете изменить чье-то действительно плохое решение по моделированию данных. Ваша очевидная проблема - это круглые скобки.

Но логика была бы упрощена, если бы вы использовали find_in_set(). Я думаю, что вы намерены:

WHERE (`restId` = '176' OR branchId = '203' OR
       find_in_set(176, `multi_vendorId`)
      ) AND
      (find_in_set(203, `excluded_branch_id`)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...