помогите с SQL запросом

nezabor
На сайте с 19.07.2010
Offline
152
471

есть запрос

SELECT

P.`name`,
P.bname AS P_bname,
P.unit_name,
PV.id AS PV_id,
PV.price,
PV.old_price,
PV.weight,
PV.energy,
PV.description,
CONCAT(PVI.pub_dir, PVI.img_name) AS img_name,
PP.props,
PC.bname AS cat_bname,
P.`state_temp`
FROM
M_parts AS P
LEFT JOIN M_parts_variant AS PV ON PV.part_id = P.id
LEFT JOIN M_parts_variant_img AS PVI ON PVI.var_parts_id = PV.id
LEFT JOIN M_parts_category AS PC ON PC.`code` = P.cat_id
LEFT JOIN (
SELECT
GROUP_CONCAT(name_prop SEPARATOR ',') AS props,
part_id
FROM
M_parts_prop
WHERE
name_prop = 'firmennoe'
OR name_prop = 'hot'
OR name_prop = 'hit'
OR name_prop = 'new'
OR name_prop = 'veget'
GROUP BY
part_id
) PP ON PP.part_id = P.id
WHERE
PC.bname = 'burgery'
AND P.`status` = 1
AND (P.`state_temp` NOT LIKE '%noshow%')
ORDER BY
P.sort ASC

вот эта строка

AND (P.`state_temp` NOT LIKE '%noshow%')
все протит

т.е. возвращает пустоту

хотя если поменять на

AND (P.`state_temp` LIKE '%noshow%')
то выводит эти строки, а мне как раз нужны строки где нет такого значения

пробовал <> те-же яйца

Чудес не бывает...
ME
На сайте с 03.07.2017
Offline
66
#1
nezabor:
а мне как раз нужны строки где нет такого значения

А вы проверяли вручную? Может строк, которые вам нужны, просто нет в базе...

nezabor
На сайте с 19.07.2010
Offline
152
#2
MkrtElion:
вы проверяли вручную? Может строк, которые вам нужны, просто нет в базе...

да все есть

разобрался в чем дело было

оказывается проблема была в том что другие строки содержали NULL а для MySQL это видишь ли не альтернативное значение)))

обновил значение до пустоты и все заработало

S
На сайте с 30.09.2016
Offline
469
#3
nezabor:
обновил значение до пустоты

NULL - это и есть пустота. Пустее некуда :)

Любое сравнение с NULL даёт NULL. А для выборки совпадения требуется TRUE, альтернативой для которого является FALSE.

Отпилю лишнее, прикручу нужное, выправлю кривое. Вытравлю вредителей.
M
На сайте с 04.10.2011
Offline
90
#4

nezabor, Дык что мешало P.`state_temp` NOT LIKE '%noshow%' OR P.`state_temp` IS NULL

Сдается, обращаться скайп avdesk-it-kmm Верстка, кодинг - контакты в профиле... VPS от 5€ (https://gmhost.com.ua/?partner=10255)
nezabor
На сайте с 19.07.2010
Offline
152
#5
Sitealert:
NULL - это и есть пустота. Пустее некуда
Любое сравнение с NULL даёт NULL. А для выборки совпадения требуется TRUE, альтернативой для которого является FALSE.

ну вот я тоже так думал, но MySQL со мной не согласен

попробуйте у себя повторить и удивитесь

mmkulikov:
Дык что мешало P.`state_temp` NOT LIKE '%noshow%' OR P.`state_temp` IS NULL

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

S
На сайте с 30.09.2016
Offline
469
#6
nezabor:
попробуйте у себя повторить и удивитесь

Не удивлюсь. И написал выше, почему. Вы просто не понимаете логику запросов. Чтобы выбрать строку, соответствующую критерию, на запрос должен быть получен ответ ИСТИНА, а не ПУСТО. А любое сравнение с пустотой даёт в ответ пустоту.

nezabor
На сайте с 19.07.2010
Offline
152
#7
Sitealert:
А любое сравнение с пустотой даёт в ответ пустоту.

разве это очевидно?

условие не противоречит NULL, и значениям...

я бы сказал, что это фича SQL.

Причем даже возврат NULL ИМХО фича MySQL

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий