2016-06-16 3 views
3

私はこれをというクエリをよりシンプルにする方法を工夫しようとしてきましたが、それはわかりません。私は、彼らが、この場合にidと等しい場合は、ゼロにschool_id_2またはschool_id_3またはschool_id_4を変更達成することができるようにしたいUPDATEは別の方法で記述できますか?

は私がすべて別々の更新を実行せずに、これを行うことができるようにしたい25です。

これを単一のサーバーで行うことは可能ですかUPDATE

問合せ:

$query = " 
    UPDATE  pupil_blog_quad_overview, 
       pupil_blog_quad 
      SET pupil_blog_quad_overview.accepted = '0', 
       pupil_blog_quad_overview.school_id = '0', 
       pupil_blog_quad_overview.updated = NOW() 
     WHERE pupil_blog_quad_overview.school_id = '25' AND 
       pupil_blog_quad_overview.group_id = '58'; 

    UPDATE  pupil_blog_quad_overview, 
       pupil_blog_quad 
      SET pupil_blog_quad.school_id_2 = '0', 
       pupil_blog_quad.updated = NOW() 
     WHERE pupil_blog_quad.school_id_2 = '25' AND 
       pupil_blog_quad_overview.group_id = '58'; 

    UPDATE  pupil_blog_quad_overview, 
       pupil_blog_quad 
      SET pupil_blog_quad.school_id_3 = '0', 
       pupil_blog_quad.updated = NOW() 
     WHERE pupil_blog_quad.school_id_3 = '25' AND 
       pupil_blog_quad_overview.group_id = '58'; 

    UPDATE  pupil_blog_quad_overview, 
       pupil_blog_quad 
      SET pupil_blog_quad.school_id_4 = '0', 
       pupil_blog_quad.updated = NOW() 
     WHERE pupil_blog_quad.school_id_4 = '25' AND 
       pupil_blog_quad_overview.group_id = '58'"; 
+0

別のアップデートが悪いのか? – Jocelyn

+0

@ Jocelynちょうど1つの更新でそれをやる方法があったのかどうか疑問に思っています。 –

+2

ディスクに数バイトのコードを保存するだけでパフォーマンスを犠牲にする準備ができている場合は、可能です。答えを見てください。 – Jocelyn

答えて

4

はい、あなたは2つの更新、あなたは、2つの異なるテーブルを更新しているのではないものとそれを行うことができます。

3つのアップデートはCASE EXPRESSIONを使用して1つのクエリで行うことができます。

UPDATE pupil_blog_quad_overview, pupil_blog_quad 
    SET pupil_blog_quad_overview.accepted = '0', 
     pupil_blog_quad_overview.school_id = '0', 
     pupil_blog_quad_overview.updated = NOW() 
WHERE pupil_blog_quad_overview.school_id = '25' 
    AND pupil_blog_quad_overview.group_id = '58'; 


UPDATE pupil_blog_quad_overview, pupil_blog_quad 
    SET pupil_blog_quad.updated = NOW() 
     ,pupil_blog_quad.school_id_2 = CASE WHEN pupil_blog_quad.school_id_2 = '25' THEN '0' ELSE pupil_blog_quad.school_id_2 END 
     ,pupil_blog_quad.school_id_3 = CASE WHEN pupil_blog_quad.school_id_3 = '25' THEN '0' ELSE pupil_blog_quad.school_id_3 END 
     ,pupil_blog_quad.school_id_4 = CASE WHEN pupil_blog_quad.school_id_4 = '25' THEN '0' ELSE pupil_blog_quad.school_id_4 END 
WHERE pupil_blog_quad_overview.group_id = '58' 
    AND '25' in(pupil_blog_quad.school_id_2,pupil_blog_quad.school_id_3,pupil_blog_quad.school_id_4)  
関連する問題