这样的查询如何实现(两个字段确定一个唯一条目)

查询条件是两组一对一的数据,第一组是productid,第二组是type
比如
productid是     type是
1------------------------裤子类
3------------------------裤子类
2------------------------衣服类
2------------------------装饰类
他们是一对一的关系
然后要对他们的price进行排序

productid有重复的,但是productid和type同时判断就没有重复了
比如type=1,productid=1才能确定一个唯一条目
如果查询单条数据SELECT * FROM order where productid =1 AND type='裤子类';就行了

在productid能确定一个条目的情况下,如果要查询多个条目用SELECT * FROM order where productid in (1,3,5)就可以了

但是productid 和type才能确定一个条目,怎么才能一次查出

貌似有点复杂,想不出来如何实现啊
表是这样!图片描述

相当于要把这些查询合并在一起 并且要在整个结果集中按price排序
SELECT * FROM 'order' where productid in (1,3) AND type='裤子类'
SELECT * FROM 'order' where productid =1 AND type='裤子类'
SELECT * FROM 'order' where productid =3 AND type='裤子类'
SELECT * FROM 'order' where productid =2 AND type='衣服类'
SELECT * FROM 'order' where productid =2 AND type='装饰类'

图片描述++++++++加上
图片描述++++++++再加上
图片描述

表如下
CREATE TABLE `order` (
`id` int(10) NOT NULL AUTO_INCREMENT,
`productid` int(10) DEFAULT NULL,
`type` varchar(255) DEFAULT NULL,
`price` int(10) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=19 DEFAULT CHARSET=utf8;

INSERT INTO `order` VALUES (1, 1, '衣服类', 515);
INSERT INTO `order` VALUES (2, 2, '衣服类', 5154);
INSERT INTO `order` VALUES (3, 3, '衣服类', 4455);
INSERT INTO `order` VALUES (4, 4, '衣服类', 55023);
INSERT INTO `order` VALUES (5, 5, '衣服类', 456);
INSERT INTO `order` VALUES (6, 1, '裤子类', 1651);
INSERT INTO `order` VALUES (7, 2, '裤子类', 164);
INSERT INTO `order` VALUES (8, 3, '裤子类', 111);
INSERT INTO `order` VALUES (9, 4, '裤子类', 1411);
INSERT INTO `order` VALUES (10, 5, '裤子类', 1511);
INSERT INTO `order` VALUES (11, 1, '装饰类', 1054);
INSERT INTO `order` VALUES (12, 2, '装饰类', 156);
INSERT INTO `order` VALUES (13, 3, '装饰类', 167324);
INSERT INTO `order` VALUES (14, 4, '装饰类', 20);
INSERT INTO `order` VALUES (15, 5, '装饰类', 165);

阅读 3.4k
2 个回答

需求不清,陈述混乱
也不知道你价格排序是所有一起排序还是分类内部排序,sql自己看吧

SELECT * FROM 'order' where (productid,type) in ((1,'裤子类'),(3,'裤子类'),(2,'衣服类'),(2,'装饰类')) order by type,price;

你的意思我感觉可能是指同时按照productid和type进行分组吧?

SELECT productid, type FROM order WHERE group by productid, type;
-- 非sql_mode严格模式下,你可以直接使用,因为每组只存在一条数据,所以这样的数据是正确可信的
SELECT * FROM order WHERE group by productid, type;

不知道是不是你的意思,理解错了请指出。。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题