2017-05-21 10 views
0

こんにちは私は3から3(meta_value)以上のものからmeta_key量の量を減らそうとしている更新文を持っています。 "0 MySQLのUPDATE文に影響を受ける行

UPDATE usermeta 
INNER JOIN cov on cov.user_id = usermeta.user_id 
SET usermeta.meta_value = '3' 
WHERE usermeta.meta_key = 'quantity' 
    AND usermeta.meta_value > '3' 
    AND cov.end_date = '2017-05-18' 
-- this is the query to see the rows I want changed 
SELECT cov.*, usermeta.meta_value 
FROM cov 
INNER JOIN usermeta 
    ON  cove.user_id = usermeta.user_id 
     AND meta_key = 'quantity' 
WHERE cov.end_date = '2017-05-18' and usermeta.meta_value > 3 
ORDER BY end_date 

私が間違っていることは誰にでも見られますか?ありがとう!

+1

実際にこのアップデートの基準を満たすデータがテーブルにあることを確認しましたか? – Wyzard

+0

yesi have!編集を行い、変更したい行を表示するために使用するクエリを追加しました。 – choloboy

答えて

1

'3'3の間に違いがあります。ですから、私は以下から始めるでしょう:

UPDATE usermeta um INNER JOIN 
     cov 
     ON cov.user_id = um.user_id 
    SET um.meta_value = '3' 
WHERE um.meta_key = 'quantity' AND 
     um.meta_value + 0 > 3 AND 
     cov.end_date = '2017-05-18'; 
+0

3を使用していて、3行ではなく、3行使用している場合、正しいセットで引用符を使用しないでください。それはまた変化を引き起こすだろうから? – choloboy

+0

にはまだエラーがあります。しかし、ありがとう。 – choloboy

+0

@choloboy。 。 。比較では、値が数値に変換されるため、違いが生じます。 'set'では、整数が文字列に変換されるので違いはありません。 –

0

私はこのようなコードでは何の問題も見ません。 usermetaテーブルのusermeta.meta_valueフィールドの値が> 3であることを確認しましたか?もう一つは、フィールドmeta_valueとINTデータ型ですか?はいの場合は、ここに「3」が必要です。

UPDATE usermeta um INNER JOIN cov 
ON cov.user_id = um.user_id 
SET um.meta_value = 3 
WHERE um.meta_key = 'quantity' AND 
um.meta_value > 3 AND 
cov.end_date = '2017-05-18'; 

これがうまくいくかどうか教えてください。

+0

残念ながら、私は次のエラーが表示されます:ルックアップエラー - MySQLデータベースエラー:間違ったDOUBLE値を切り捨てました: – choloboy

+0

それでは、 '3'に戻す必要があります。それはvarcharかINTか?また、そのテーブルに3より大きい値があるかどうかチェックしましたか? 異なるタイプで比較が行われています.MySQLが異なるデータ型を比較す​​ると、比較の前に内部的にDOUBLEにキャストされます。だから、問題を解決するために一重引用符を入れたり、キャストすることができます。 –

+0

longtextはデータ型です。 – choloboy

0

私のアップデートに関する問題はコードではありませんでした。これは、userid列に重複したIDがあったためです。無効なユーザーを指し示し、WHERE句のNOT INに追加すると、問題が修正されました。

関連する問題