1

2つのテーブルの結合については多くの情報がありますが、Selectには興味がありませんが、更新には興味があります(これも役に立ちませんでした:他の2つのテーブルの値でテーブルの列を更新します)。

Magentoで属性を注文する必要があります。私が計画している方法は次のとおりです。2つの関連するテーブル(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を使用して、「iterator」列の値で更新するにはどうすればよいですか?

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 
4

2 に答える 2

1

ストアドプロシージャまたはビューを使用する必要があります。イテレータが生成され、その組み合わせがeav_attribute_optionテーブルを更新するためにアクセスする必要がある表形式のデータであるため、単一の更新コマンドでは必要な処理を実行できません。

SPを使用して、イテレータクエリのカーソルを作成し、それをループして、単純なwhereを使用してeav_attribute_optionテーブルのsort_order列を更新します。

ビューを使用して、イテレータクエリのビューを作成する必要があります。次に、このビュー名を使用してeav_attribute_optionテーブルに参加し、関連する更新コマンドを指定できます。

データが変更されてデータベースサーバーに負荷がかかるとビューが常に更新されるため、SP方式をお勧めします。

于 2012-05-16T15:01:29.707 に答える
1
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 
于 2012-05-17T08:41:23.677 に答える