Запрос не смертельный, но сегодня с головой большие проблемы. Необходимо что бы оба значения удовлетворяли запросу, а не только одно из них, как в последнем запросе. Помогите кто может, сами мы не местные. [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]
Бр-р-р. Извините у меня сейчас температура, действительно с трудом соображаю. [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 и единица и двойка.
Будет много значений, с разным количеством полей. Так пойдет? [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]
так дольше. переписать можно, но лучше сначала таки разобрать задачу, а не устраивать загадки, которые оказываются несоответствующими действительности.