我第一次问问题。如果您必须单击图像以获取示例数据和我正在寻找的内容,请提前道歉。我无法仅使用文本使格式看起来正确。
包含示例数据和我正在寻找的内容的图像
编辑:也许这会有所帮助...
我的数据实际上只是由"|"和","分隔的字符串。每个订单都有 2 面和一堆供应商和价格。供应商按价格降序排序。
order1|side=0|0,price1,provider1|1,price2,provider2|2,price3,provider1order1|side=1|0,price4,provider2|1,price5,provider1|2,price6,provider1
因此,提供商 1 在侧 0 上给出了最佳价格 (price1(,在侧 0 上给出了最差价格 (price3(。提供商 1 还在第 1 侧给出了第二好的价格,在第 1 侧给出了最差的价格。我想将价格 1 与价格 5 和价格 3 与价格 6 配对并获得差异。
首先,我将字符串解析为 2 个带有列的表:
表1
在线订单|侧面|级别|提供商|价格
1..|0....|0.......|1.....|1.....
1..|0....|1..|2.....|阿拉伯数字。。。。。。。
1..|0....|2..|1.....|3...
表2
在线订单|侧面|级别|提供商|价格
1..|1....|0.......|2.....|4.....
1..|1....|1..|1.....|5...
1..|1....|2..|1.....|6...
我想比较提供商 1 在侧0 的第一个价格与提供商 1 在侧 1 的第一个价格,无论级别如何。提供者 1 的第二个价格在侧 0,提供者 1 的第二个价格在侧 1,无论级别如何。依此类推,只要我可以将 provider1 的价格配对在两边。
我的图像是从表1中选择订单,水平,价格,其中提供者= 1;并从表2中选择订单,级别,价格,其中提供者= 1;
在生产中,我将有超过 1 个订单,并且 0 和 1 面的价格数量不均匀。因此,如果提供商 1 在侧 0 上给出 1 个价格,在侧 1 上给出 3 个价格,我只想将 side0 价格与最佳面 1 价格进行比较。
编辑 2:找到解决方案
显然,我想要的称为按组自动增量,如 http://dev.mysql.com/doc/refman/5.0/en/example-auto-increment.html 中所述。
创建表3(订单 int(10( unisgned, id MEDIUMINT NOT NULL AUTO_INCREMENT, 价格双精度, 主键 (order,id(( 引擎=MyISAM;
插入到表3(订单,价格(中(从表1中选择订单,价格,其中提供者= 1(;
对其他表重复此操作,按顺序连接,ID。
很难理解这个场景。根据您的示例数据,这是解决方案。
.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)