Запрос к базе Mysql

  • Автор темы Holger Dee Assuran
  • Дата начала
H

Holger Dee Assuran

Вот встал в ступор.
У меня в базе есть таблица объектов:
Код:
`id` int(10) unsigned NOT NULL auto_increment,
`obj_type` varchar(10) NOT NULL default '',
`access` varchar(255) NOT NULL default '',
`parent_id` int(10) NOT NULL default '0',
`path` varchar(255) NOT NULL default '',
`filename` varchar(255) NOT NULL default '',
`title` varchar(255) NOT NULL default '',
`position` int(10) NOT NULL default '0',
`condition` varchar(10) NOT NULL default '',
`view_in_map` enum('N','Y') NOT NULL default 'N',
`view_in_menu` enum('N','Y') NOT NULL default 'N',
`creator` int(10) NOT NULL default '0',
`create_date` datetime NOT NULL default '0000-00-00 00:00:00',
`modifyer` int(10) NOT NULL default '0',
`modify_date` datetime NOT NULL default '0000-00-00 00:00:00',
`publicist` int(10) NOT NULL default '0',
`public_date` datetime NOT NULL default '0000-00-00 00:00:00'

Мне нужно выбрать из этой таблицы данные соответствующие определенным критерием. Для этой цели я написал запрос:
Код:
select id, obj_type, access, path, filename, title from tree where parent_id='0' and condition!='deleted' and public_date < '2007-06-15 12:54:51' and view_in_map='Y' and obj_type='folder' or obj_type='page' or obj_type='media' order by position asc

Вроде все правильно, да только выполняется он странно - выбираются строки где parent_id не равен нулю или view_in_map='N'. Я думаю я что-то упустил, но что - найти не могу. Кто может подскажет?
 
M

MajestiC

Долго не разбирался, но скорее всего ошибка в скобках.

SELECT id, obj_type, access, path, filename, title
FROM tree
WHERE parent_id='0'
AND condition!='deleted'
AND public_date < '2007-06-15 12:54:51'
AND view_in_map='Y'
AND
(obj_type='folder' OR obj_type='page' OR obj_type='media')
ORDER BY position ASC
 
H

Holger Dee Assuran

Я нашел как обойти конструкцию OR
Я несколько переписал запрос и добился желаемого результата.
Если кому интересно - запрос выглядит так:
Код:
select id, obj_type, access, path, filename, title from tree where parent_id='0' and condition!='deleted' and public_date < '2007-06-15 16:59:26' and view_in_map='Y' and obj_type in ('folder', 'page', 'media') order by position asc
здесь я использовал конструкцию IN проверяющую, совпадает ли значение в ячейке с одним перечисленых в скобках. Если перед IN поставить еще конструкцию NOT, то она будет проверять что-бы значение в ячейке не совпадало со значениями в скобках.

Для MajestiC - ты прав. Я попробовал твой вариант - он работает.
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!