Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/rust/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 顺序上的间隙,在相对位置上连接_Mysql_Sql_Join - Fatal编程技术网

Mysql 顺序上的间隙,在相对位置上连接

Mysql 顺序上的间隙,在相对位置上连接,mysql,sql,join,Mysql,Sql,Join,我第一次问一个问题。如果您必须单击图像以获取样本数据和我要查找的内容,请提前道歉。我无法仅用文本使格式看起来正确 编辑:也许这会有帮助 我的数据实际上只是由“|”和“,”分隔的字符串。每个订单有两个方面和一组供应商和价格。供应商以降价方式订购 订单1 |端=0 | 0,价格1,供应商1 | 1,价格2,供应商2 | 2,价格3,供应商1 订单1 |方=1 | 0,价格4,供应商2 | 1,价格5,供应商1 | 2,价格6,供应商1 所以provider1在side0上给出了最佳价格1,在side

我第一次问一个问题。如果您必须单击图像以获取样本数据和我要查找的内容,请提前道歉。我无法仅用文本使格式看起来正确

编辑:也许这会有帮助

我的数据实际上只是由“|”和“,”分隔的字符串。每个订单有两个方面和一组供应商和价格。供应商以降价方式订购

订单1 |端=0 | 0,价格1,供应商1 | 1,价格2,供应商2 | 2,价格3,供应商1 订单1 |方=1 | 0,价格4,供应商2 | 1,价格5,供应商1 | 2,价格6,供应商1

所以provider1在side0上给出了最佳价格1,在side0上给出了最差价格3。Provider1也给出了side1的次优价格和side1的最差价格。我想把price1和price5配对,price3和price6配对,然后得到不同的结果

首先,我将字符串解析为两个具有列的表:

表1

订单|侧|级|供应商|价格

1……| 0……| 0……| 1……| 1

1……| 0……| 1……| 2……| 2

1……| 0……| 2……| 1……| 3

表2

订单|侧|级|供应商|价格

1.1.0.2.4

1.........1......1.......5

1.1.2.1.6

我想将provider1在side0上的第一个价格与provider1在side1上的第一个价格进行比较,而不考虑级别。和provider1在side0上的第二个价格,以及provider1在side1上的第二个价格,无论级别如何。如此类推,只要我能将provider1的价格在双方配对

我的图像是从表1中选择订单、级别、价格,其中提供者=1; 并从表2中选择订单、级别、价格,其中提供者=1

在生产中,我将有超过1个订单,并且0方和1方的价格数量不均衡。所以,如果provider1在side0上给出了1个价格,在side1上给出了3个价格,我只想比较side0的价格和最好的side1的价格

编辑2:找到解决方案

显然,我想要的是按组自动递增,如中所述

创建表3 订单int10未签名,id中间不为空自动递增,价格加倍,主键订单,id 发动机=MyISAM

在表3中插入订单,价格为select order,价格来自表1,其中provider=1


对另一个表重复上述步骤,按顺序连接,id.

很难理解这个场景。根据您的示例数据,下面是解决方案

SQL:

输出:

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)

图像是不够的。请说说你想要什么。你想要两个表中的前3条记录吗?@DylanSu有帮助吗?@Suyash有帮助吗?发布解决方案。请检查这是否是你所期望的@乔希:谢谢!不完全是我需要的答案,但给了我要搜索的关键词。我的答案是按组自动递增。
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)