2017-11-22 19 views
-1

私は、減算したいデータベースにlongtext型の2つの値を持っています。ここでSQL - 同じテーブル内の2つの行の除外

はスキーマです:

enter image description here

私は0.15で_store_priceをsubstractし、この結果を持っている_regular_priceでそれを保存したい:

enter image description here

私は本当に上の基本的な知識を持っていますSQLを使用していましたが、これをphpmyadminで実行しようとしました。

UPDATE wp_postmeta AS p1 
LEFT JOIN wp_postmeta AS p2 
ON p1.post_id = 30860 
SET p1.meta_value = CAST(CAST(p2.meta_value as DECIMAL(10,2)) - 0.15) as char(20)) 
WHERE p1.meta_key = '_regular_price' 
AND p2.meta_key = '_store_price' 

どのようにこれを達成するためのアイデアはありますか?

答えて

1

2つのクエリが必要なので、これらの行のうちの1つだけで更新を実行するためにクエリを「整列」させる必要があります。

UPDATE wp_postmeta AS p1 
SET p1.meta_value = (
    SELECT CAST((CAST(p2.meta_value AS DECIMAL(10, 2)) - 0.15) AS CHAR(20)) 
    FROM (
    SELECT * 
    FROM wp_postmeta 
    ) AS p2 
    WHERE p2.post_id = 30860 AND p2.meta_key = '_prix_magasin' 
) 
WHERE p1.post_id = 30860 AND p1.meta_key = '_regular_price' 
; 

2つのmeta_key行が現在

UPDATE wp_postmeta AS p1 
INNER JOIN wp_postmeta AS p2 ON p1.post_id = p2.post_id 
          AND p1.meta_key = '_regular_price' 
          AND p2.meta_key = '_prix_magasin' 
SET p1.meta_value = CAST((CAST(p2.meta_value as DECIMAL(10,2)) - 0.15) as char(20)) 

## example only 
## where p1.post_id IN(30860,30861,30862,30863 ...) 
; 

dbfiddle here

+0

私はそれを動作させるために、このようにそれを修正する必要がありました: AS P1 SETのp1.meta_value wp_postmeta UPDATEは= (CASTを選択DECIMAL AS((CAST(p2.meta_value(10,2) ) - 0.15)ASCHAR(20)) FROM(SELECT * FROM wp_postmeta)AS p2 WHERE p2.post_id = 30860 AND p2.meta_key = '_prix_magasin') WHERE p1.post_id = 30860 AND p1.meta_key = '_regular_price' – Lelka

+0

今、テーブルのすべてのレコードに対して、その特定のpost_idだけでなく、どのようにしたいのですか? – Lelka

+0

まだコメントを追加できるのかどうかわかりませんが、 '_store_price' p2.meta_valueが空ではなく、まだ更新されている場合にのみ '_regular_price' p1.meta_valueを更新しようとしています。なぜどんなアイデア? AS P1 INNER wp_postmeta UPDATEはp1.post_id = p2.post_id AND p1.meta_key = '_regular_price' AND p2.meta_key = '_store_price' SETのp1.meta_value = CAST((CAST(p2.meta_value ON P2とwp_postmetaをJOIN ASCHAR(20,2)) ここでp2.meta_value!= ''(10進数の場合) - CAST(p2.meta_value AS DECIMAL(10,2))* 0.02) – Lelka

0

一緒に整列されるように値の大きい数は、次に条件を内側参加しかしセットアップザ参加使用更新JOINON条件は、2つのテーブルの行を関連付ける必要があります。両者が同じであることを指定するために使用する必要がありますpost_id。各テーブルの条件には、単独でWHERE句を使用します。

2番目の表に一致がない場合を処理する必要がない限り、INNER JOINを使用してください。

UPDATE wp_postmeta AS p1 
JOIN wp_postmeta AS p2 ON p1.post_id = p2.post_id 
SET p1.meta_value = p2.meta_value - 0.15 
WHERE p1.meta_key = '_regular_price' 
AND p2.meta_key = '_store_price' 
AND p1.post_id = 30860 
関連する問題