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

Тема в разделе "PHP программирование", создана пользователем Holger Dee Assuran, 15 июн 2007.

  1. Holger Dee Assuran

    Holger Dee Assuran Гость

    Вот встал в ступор.
    У меня в базе есть таблица объектов:
    Код (Text):
    `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'
    Мне нужно выбрать из этой таблицы данные соответствующие определенным критерием. Для этой цели я написал запрос:
    Код (Text):
    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'. Я думаю я что-то упустил, но что - найти не могу. Кто может подскажет?
     
  2. MajestiC

    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
     
  3. Holger Dee Assuran

    Holger Dee Assuran Гость

    Я нашел как обойти конструкцию OR
    Я несколько переписал запрос и добился желаемого результата.
    Если кому интересно - запрос выглядит так:
    Код (Text):
    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 - ты прав. Я попробовал твой вариант - он работает.
     
Загрузка...

Поделиться этой страницей