有很多关于连接两个表的信息,但是我对 Select 不感兴趣,但对 Update 不感兴趣(这个也没有帮助:用其他两个表中的值更新表中的列)。
我需要在 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:=@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) 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
最大的问题: 如何使用“迭代器”列中的值更新 eav_attribute_option 中的 sort_order 列,并将 option_id 作为链接字段?
从 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
我从这里得到“迭代器”查询:使用 MySQL,如何生成包含表中记录索引的列?
编辑:这是答案
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) x) tbl2
SET eav_attribute_option.sort_order = tbl2.iterator
WHERE eav_attribute_option.option_id = tbl2.option_id