我第一次提问。如果您必须点击图片以获取样本数据以及我正在寻找的内容,请提前道歉。我无法通过文本获得正确的格式。
Image with sample data and what I'm looking for
编辑:也许这会有所帮助......
我的数据实际上只是由' |'分隔的字符串。和','。每个订单有2个方面和一堆提供商和价格。供应商按价格下降。
order1 |侧= 0 | 0,价格1,provider1 | 1,price2,Provider2之间| 2,price3,provider1 order1 |侧= 1 | 0,price4,Provider2之间| 1,price5,provider1 | 2,price6,provider1
因此,provider1在side0上给出了最优价格(price1),在side0上给出了最差价格(price3)。 Provider1在side1上也给出了第二好的价格,在side1上给出了最差的价格。我想将price1与price5和price3与price6配对并获得差异。
首先,我将字符串解析为包含列的2个表:
表1
订单|侧面|等级|供应商|价格
1 ...... | 0 ..... | 0 ....... | 1 ........... | 1 ....... < / p>
1 ...... | 0 ..... | 1 ....... | 2 ........... | 2 ....... < / p>
1 ...... | 0 ..... | 2 ....... | 1 ........... | 3 ....... < / p>
表2
订单|侧面|等级|供应商|价格
1 ...... | 1 ..... | 0 ....... | 2 ........... | 4 ....... < / p>
1 ...... | 1 ..... | 1 ....... | 1 ........... | 5 ....... < / p>
1 ...... | 1 ..... | 2 ....... | 1 ........... | 6 ....... < / p>
我想比较提供者1在side0上的第一个价格与提供者1在第一方的第一个价格,无论其水平如何。而且提供者1在side0上的第二个价格与提供者1在第一方的第二个价格无论等级如何。等等,只要我能将双方的提供商1的价格配对。
我的图片是从table1中选择订单,级别,价格,其中provider = 1; 并从table2中选择order,level,price,其中provider = 1;
在生产中,我将有超过1个订单,而0和1的价格数量不均匀。因此,如果provider1在side0上给出1个价格,在side1上给出3个,我只想比较side0价格和最好的side1价格。
编辑2:找到解决方案
显然我想要的是http://dev.mysql.com/doc/refman/5.0/en/example-auto-increment.html中描述的按组自动增量。
创建table3 (order int(10)unisgned,id MEDIUMINT NOT NULL AUTO_INCREMENT,price double,primary key(order,id) )ENGINE = MyISAM;
插入table3(订单,价格)为(选择订单,来自table1的价格,其中provider = 1);
重复其他表,加入订单,id。
答案 0 :(得分:0)
很难理解这个场景。根据您的样本数据,这里有解决方案。
SQL:
-- Prepare data, just for demo
create table table1(id int auto_increment primary key, `order` int, var int, data char(20));
create table table2(id int auto_increment primary key, `order` int, var2 int, data2 char(20));
insert into table1(`order`, var, data) values
(1,1,'x'),
(1,3,'y'),
(1,5,'z');
insert into table2(`order`, var2, data2) values
(1,1,'a'),
(1,2,'b'),
(1,6,'c'),
(1,7,'d');
select * from table1;
select * from table2;
-- Process of reporting
SET @rownum1:=0;
SET @rownum2:=0;
SELECT t1.order, t1.var, t2.var2, t1.data, t2.data2
FROM
(SELECT *, @rownum1:=@rownum1+1 AS rownum FROM table1) t1,
(SELECT *, @rownum2:=@rownum2+1 AS rownum FROM table2) t2
WHERE t1.rownum = t2.rownum AND
t1.`order` = 1 AND
t2.`order` = 1;
输出:
mysql> select * from table1;
+----+-------+------+------+
| id | order | var | data |
+----+-------+------+------+
| 1 | 1 | 1 | x |
| 2 | 1 | 3 | y |
| 3 | 1 | 5 | z |
+----+-------+------+------+
3 rows in set (0.00 sec)
mysql> select * from table2;
+----+-------+------+-------+
| id | order | var2 | data2 |
+----+-------+------+-------+
| 1 | 1 | 1 | a |
| 2 | 1 | 2 | b |
| 3 | 1 | 6 | c |
| 4 | 1 | 7 | d |
+----+-------+------+-------+
4 rows in set (0.00 sec)
mysql>
mysql> -- Process of reporting
mysql> SET @rownum1:=0;
Query OK, 0 rows affected (0.00 sec)
mysql> SET @rownum2:=0;
Query OK, 0 rows affected (0.00 sec)
mysql> SELECT t1.order, t1.var, t2.var2, t1.data, t2.data2
-> FROM
-> (SELECT *, @rownum1:=@rownum1+1 AS rownum FROM table1) t1,
-> (SELECT *, @rownum2:=@rownum2+1 AS rownum FROM table2) t2
-> WHERE t1.rownum = t2.rownum AND
-> t1.`order` = 1 AND
-> t2.`order` = 1;
+-------+------+------+------+-------+
| order | var | var2 | data | data2 |
+-------+------+------+------+-------+
| 1 | 1 | 1 | x | a |
| 1 | 3 | 2 | y | b |
| 1 | 5 | 6 | z | c |
+-------+------+------+------+-------+
3 rows in set (0.00 sec)