Mysql5 - сложное объединение условий выборки

Тема в разделе "SQL", создана пользователем Holger Dee Assuran, 7 июл 2008.

  1. Holger Dee Assuran

    Holger Dee Assuran Гость

    В общем есть у меня такой запросик...
    [sql]select public_comm.pub_id from `public_comm`, `publication` where publication.id=public_comm.pub_id and publication.condition!='deleted' and (public_comm.comm_type='mark' and public_comm.comm_id='10') and (public_comm.comm_type='model' and public_comm.comm_id='58') group by public_comm.pub_id[/sql]

    Общая идея такова - получить список айдишников статей соответствующих выборке по году, номеру журнала, разделу, рубрике, марке машины, ее модели и модификации причем каждый из параметров выборки - опционален (т.е. может отсутствовать). Запрос строится сценарием на основе имеющихся у него параметров выборки.
    Вся сложность в том, что год, номер, раздел и рубрика хранятся в виде ключей-указателей в таблице самой статьи, а связи с маркой, моделью и модификацией в отдельной таблице связей статьи. Причем любая связь статьи определяется двумя полями (не считая указателя самой статьи) - comm_type определяет объект связи (марку или модель и т.д.), а comm_id определяет указатель экземпляра объекта (конкретную марку или модель и т.д.)

    Вся фигня в том, что этот запрос возвращает пустой результат, хотя я знаю что вернуть ему есть что... Я пробовал заменить AND между определением марки и модели (они в скобках) на OR - в таком случае запрос возвращает набор статей, но там много ненужных данных - при выборке по марке и модели выбираются статьи связанные с любой моделью марки, а мне нужны статьи только по одной модели.
    В общем голову сломал - гугль не панацея, в книжке моей умной такая ситуация не обсуждалась... что делать не ф курсе. ПРОШУ СОВЕТА
     
  2. etc

    etc Гость

    Запрос, очевидно, с вами не согласен.
    У вас в условии взаимо исключающиеся подусловия, вот оттуда и пустой НД.
    Остальное это гадание, давайте конкретику, тогда и думать можно.
    Можно предположить вот это:
    [sql]select public_comm.pub_id from `public_comm`, `publication` where publication.id=public_comm.pub_id and publication.condition!='deleted' and ((public_comm.comm_type='mark' and public_comm.comm_id='10') OR (public_comm.comm_type='model' and public_comm.comm_id='58')) group by public_comm.pub_id[/sql]
     
  3. destr

    destr Гость

    Ну вы бы таблички хоть нарисовали, на слух что-то как-то плохо представляется.
    (public_comm.comm_type='mark' and public_comm.comm_id='10') and (public_comm.comm_type='model' and public_comm.comm_id='58') Тут точно должно быть OR иначе условние никогда не выполнится. Вы вот так пробовали вставлять OR AND ((...)OR(...)) AND
     
  4. Holger Dee Assuran

    Holger Dee Assuran Гость

    Таблица данных статьи
    [sql]CREATE TABLE `publication` (
    `id` int(10) unsigned NOT NULL auto_increment,
    `condition` varchar(10) NOT NULL default '',
    `create_date` datetime NOT NULL default '0000-00-00 00:00:00',
    `creator` int(10) NOT NULL default '0',
    `modify_date` datetime NOT NULL default '0000-00-00 00:00:00',
    `modifyer` int(10) NOT NULL default '0',
    `year` int(4) NOT NULL,
    `mag_id` int(10) NOT NULL,
    `part_id` int(10) NOT NULL,
    `rub_id` int(10) NOT NULL,
    `filename` varchar(50) NOT NULL,
    `title` text NOT NULL,
    `sub_title` varchar(50) NOT NULL,
    `image` char(3) NOT NULL,
    `announce` text NOT NULL,
    `cut_text` longtext NOT NULL,
    `full_text` longtext NOT NULL,
    `num` int(2) NOT NULL,
    PRIMARY KEY (`id`)
    )[/sql]
    Таблица связей статьи
    [sql]CREATE TABLE `public_comm` (
    `pub_id` int(10) NOT NULL,
    `comm_type` varchar(20) NOT NULL,
    `comm_id` int(10) NOT NULL,
    KEY `pub_id` (`pub_id`),
    KEY `comm_type` (`comm_type`)
    )[/sql]
    Повторюсь... я пробовал использовать конструкцию (... AND ...) OR (... AND ...) - такая выборка возвращает все статьи связанные с нужной маркой и любой моделью, даже если указана нужная модель. А нужно чтоб вернула все статьи связанные с маркой, но не связанные ни с какой моделью + все статьи связанные с указанной моделью.
     
  5. etc

    etc Гость

    вам советовали совсем другую - ... AND ((... AND ...) OR (... AND ...)), почувстуйте разницу. :)
     
Загрузка...
Похожие Темы - Mysql5 сложное объединение
  1. Ice-ninJa
    Ответов:
    1
    Просмотров:
    1.886
  2. kashrman
    Ответов:
    0
    Просмотров:
    1.427

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