2016-02-17 10 views
-1

我第一次提問。如果您必須點擊圖片才能獲取樣本數據以及我在找什麼,請提前道歉。我無法讓文本看起來正確。依次缺口,加入相對位置

Image with sample data and what I'm looking for

編輯:也許這將幫助...

我的數據其實只是字符串通過分隔 '|'和','。每個訂單都有兩面和一堆供應商和價格。供應商按價格降序訂購。價格1,價格2,供應商2 |價格3,供應商1 order1 | side = 1 | 0,price4,provider2 | 1,price5,provider1 | 2,price6,price1, provider1

因此,provider1給出了side0上的最優價格(price1)和side0上的最差價格(price3)。 Provider1也在side1上給出了第二好的價格,在side1上給出了最差的價格。我想將價格1與價格5和價格3與價格6配對並得到差異。

要開始我解析串入2代表的列:

表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 ....... | 1 ... ........ | 5 .......

1 ....... | 1 ..... | 2 ....... | 1 ... ........ | 6 .......

我想將provider1的side0上的第一個價格與provider1的side1上的第一個價格進行比較,無論其級別如何。而provider1的第二個價格在side0上,而provider1的第二個價格在side1上,不管級別如何。只要我能夠將provider1的價格與雙方進行配對,就可以這樣。

我的圖像是選擇順序,級別,價格from table1 where provider = 1; 並從表2中選擇訂單,級別,價格,其中provider = 1;

在生產中,我會有1個以上的訂單,而0方和1方有不均勻的價格數量。所以如果provider1在side1上給出了1的價格,我只想比較side0的價格和最好的side1的價格。

編輯2:發現的解決方案

顯然我想要的東西被稱爲按組自動增量爲http://dev.mysql.com/doc/refman/5.0/en/example-auto-increment.html描述。(訂單int(10)unisgned,id MEDIUMINT NOT NULL AUTO_INCREMENT,price double,主鍵(order,id) )ENGINE = MyISAM;其中,插入到表格3(訂單,價格)as(選擇訂單,價格從table1哪裏提供= 1);

重複其他表,加入訂單,ID。

+0

的圖像是不夠的。請說出你想要的東西。 –

+0

你是否想要兩張表的前三名記錄? – Suyash

+0

@DylanSu這是否有幫助? –

回答

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:[email protected]+1 AS rownum FROM table1) t1, 
    (SELECT *, @rownum2:[email protected]+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:[email protected]+1 AS rownum FROM table1) t1, 
    -> (SELECT *, @rownum2:[email protected]+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) 
+0

謝謝!不完全是我需要的答案,但給了我關鍵詞來搜索。按組自動遞增是我的答案。 –