有很多關於加入兩個表的信息,但是我對選擇不感興趣,但更新(這個也沒有幫助:Update a column in a table with values from two other tables)。更新列與從MySQL中加入兩個表獲得的值
我需要在Magento中訂購屬性。我打算這樣做的方式是這樣的: 有兩個相關的表(eav_attribute_option和eav_attribute_option_values)。他們加入了option_id。 我需要根據在eav_attribute_option_values表(值列)的字母順序在eav_attribute_option表更新SORT_ORDER字段。
我到目前爲止是這樣的:
SELECT *
FROM eav_attribute_option_value, eav_attribute_option
WHERE eav_attribute_option_value.option_id = eav_attribute_option.option_id
ORDER BY value
與我獲得:
value_id option_id store_id value option_id_1 attribute_id sort_order
13534 5681 0 ADULT 5681 131 0
13543 5710 0 Yellow 5710 134 0
13547 502 0 Yellow - 10A 502 127 0
13548 3001 0 Yellow - 120cm 3001 127 0
13549 503 0 Yellow - 12A 503 127 0
用下面的查詢我明白我需要:
SELECT t.*, @i:[email protected]+1 AS iterator
FROM (SELECT value, eav_attribute_option.option_id
FROM eav_attribute_option_value, eav_attribute_option
WHERE eav_attribute_option_value.option_id = eav_attribute_option.option_id
ORDER BY value) t,(SELECT @i:=0) foo
我得到這個:
value option_id iterator
ADULT 5681 1
Yellow 5710 2
Yellow - 10A 502 3
Yellow - 120cm 3001 4
Yellow - 12A 503 5
Yellow - 14A 504 6
最大的問題: 如何使用「iterator」列中的值更新eav_attribute_option中的sort_order列,並將option_id作爲鏈接字段?
SELECT * FROM eav_attribute_option
option_id attribute_id sort_order
1 18 0
2 18 1
3 127 0
4 127 0
5 127 0
6 127 0
我從這裏的 「迭代」 查詢:With MySQL, how can I generate a column containing the record index in a table?
編輯:這裏的答案
UPDATE eav_attribute_option, (SELECT t.*, @i:[email protected]+1 AS iterator
FROM
(SELECT value, eav_attribute_option.option_id
FROM eav_attribute_option_value, eav_attribute_option
WHERE eav_attribute_option_value.option_id = eav_attribute_option.option_id
ORDER BY value) t,(SELECT @i:=0) x) tbl2
SET eav_attribute_option.sort_order = tbl2.iterator
WHERE eav_attribute_option.option_id = tbl2.option_id
它可以是這樣的: UPDATE eav_attribute_option,tbl2的 SET eav_attribute_option.sort_order = tbl2.iterator WHERE eav_attribute_option.option_id = tbl2.option_id 我只是隨便用 「TBL2」 部分的麻煩。 .. – Mike
UPDATE eav_attribute_option,(SELECT t。*,@i:= @ i + 1 AS iterator FROM(SELECT value,eav_attribute_option.option_id FROM eav_attribute_option_value,eav_attribute_option WHERE eav_attribute_option_value.option_id = eav_attribute_option.option_id ORDER BY value)t,(SELECT @i := 0))tbl2 SET eav_attribute_option.sort_order = tbl2.iterator WHERE eav_attribute_option.option_id = tbl2.option_id – Mike