За последние 24 часа нас посетили 17760 программистов и 1626 роботов. Сейчас ищет 1781 программист ...

Довольно простой запрос, но помогите, пожалуйста

Тема в разделе "MySQL", создана пользователем DZEN, 23 апр 2008.

  1. DZEN

    DZEN Активный пользователь

    С нами с:
    10 сен 2007
    Сообщения:
    250
    Симпатии:
    0
    Запрос не смертельный, но сегодня с головой большие проблемы.
    Необходимо что бы оба значения удовлетворяли запросу, а не только одно из них, как в последнем запросе.
    Помогите кто может, сами мы не местные.

    [sql]
    CREATE TABLE `post` (
    `id_post` int(11) NOT NULL auto_increment,
    `name_post` text NOT NULL,
    PRIMARY KEY (`id_post`)
    ) ENGINE=MyISAM;

    CREATE TABLE `post_values` (
    `post_id` int(11) unsigned NOT NULL default '0',
    `value_id` tinyint(3) unsigned default NULL,
    `value` float(10,2) unsigned default NULL
    ) ENGINE=MyISAM;

    INSERT INTO `post` VALUES(NULL, 'first one');
    INSERT INTO `post_values` VALUES(1, 1, 10);
    INSERT INTO `post_values` VALUES(1, 2, 20);

    SELECT DISTINCT post.id_post
    FROM post, post_values
    WHERE
    ( post_values.value_id = 1 AND post_values.value BETWEEN 1 AND 1000000 AND post.id_post = post_values.post_id )
    OR
    ( post_values.value_id = 2 AND post_values.value BETWEEN 1 AND 1000000 AND post.id_post = post_values.post_id )
    [/sql]
     
  2. armadillo

    armadillo Активный пользователь

    С нами с:
    6 апр 2007
    Сообщения:
    2.380
    Симпатии:
    0
    Адрес:
    Russia, Moscow
    полагаю
    INSERT INTO `post` VALUES(1, 'first one');

    удовлетворяют оба, но выводится одно
     
  3. DZEN

    DZEN Активный пользователь

    С нами с:
    10 сен 2007
    Сообщения:
    250
    Симпатии:
    0
    Бр-р-р. Извините у меня сейчас температура, действительно с трудом соображаю.

    [sql]
    INSERT INTO `post` VALUES(1, 'first one');
    INSERT INTO `post` VALUES(2, 'second in');
    INSERT INTO `post_values` VALUES(1, 1, 10);
    INSERT INTO `post_values` VALUES(1, 2, 20);
    INSERT INTO `post_values` VALUES(2, 1, 10);
    INSERT INTO `post_values` VALUES(2, 2, 20);

    SELECT DISTINCT post.id_post
    FROM post, post_values
    WHERE
    ( post_values.value_id = 1 AND post_values.value BETWEEN 1 AND 1000000 AND post.id_post = post_values.post_id )
    AND
    ( post_values.value_id = 2 AND post_values.value BETWEEN 1 AND 1000000 AND post.id_post = post_values.post_id )
    [/sql]

    Хочу AND вместо OR поставить.
    На выходе должны быть оба id_post и единица и двойка.
     
  4. armadillo

    armadillo Активный пользователь

    С нами с:
    6 апр 2007
    Сообщения:
    2.380
    Симпатии:
    0
    Адрес:
    Russia, Moscow
    одновременно value_id и 1 и 2быть не может.
    пиши in()

    зы и объедини одинаковые условия.
     
  5. DZEN

    DZEN Активный пользователь

    С нами с:
    10 сен 2007
    Сообщения:
    250
    Симпатии:
    0
    Будет много значений, с разным количеством полей. Так пойдет?

    [sql]
    SELECT post.id_post
    FROM post
    WHERE post.id_post IN
    (
    SELECT post_values.post_id FROM post_values WHERE post_values.value_id=1 AND post_values.value BETWEEN 1 AND 1000
    UNION
    SELECT post_values.post_id FROM post_values WHERE post_values.value_id=2 AND post_values.value BETWEEN 2 AND 2000
    UNION
    SELECT post_values.post_id FROM post_values WHERE post_values.value_id=3 AND post_values.value BETWEEN 3 AND 3000000
    )[/sql]
     
  6. armadillo

    armadillo Активный пользователь

    С нами с:
    6 апр 2007
    Сообщения:
    2.380
    Симпатии:
    0
    Адрес:
    Russia, Moscow
    так дольше. переписать можно, но лучше сначала таки разобрать задачу, а не устраивать загадки, которые оказываются несоответствующими действительности.
     
  7. DZEN

    DZEN Активный пользователь

    С нами с:
    10 сен 2007
    Сообщения:
    250
    Симпатии:
    0
    Извини, я и так держусь на RebBull, удивлен что вообще могу что-то написать. Спасибо за помощь.