【问题标题】:MySQL - Select instead of update for testingMySQL - 选择而不是更新进行测试
【发布时间】:2013-07-29 18:22:57
【问题描述】:

背景

我在wordpress.org forum 上找到了一些代码。我想修改它,以便根据我是否设置自定义字段来设置计数器。就我而言,如果自定义字段的键为“过期”且值 =“1”,则不应计算在内。

MySQL

在我的情况下,SQL 将像这样呈现......

UPDATE wi1_term_taxonomy tt SET count = (SELECT count(p.ID) FROM wi1_term_relationships tr LEFT JOIN wi1_posts p ON (p.ID = tr.object_id AND p.post_type = 'product' AND p.post_status = 'publish') WHERE tr.term_taxonomy_id = tt.term_taxonomy_id) WHERE tt.taxonomy = 'color'

缺少自定义字段部分

缺少的是检查自定义字段的“位置”部分。

问题 - 选择结果?

要获得上述问题的答案,可能需要为 QA 进行本地化。我的问题是……

我能否以一种可以快速测试的方式更改查询,而不是更新,以便在我让它更改任何内容之前查看我的结果?否则我每次都需要查找并重置更新的值。

到目前为止我所做的尝试

  • 我尝试使用 select 而不是 update,但许多不同的错误让我放弃了。
  • 我试图打破中间的选择部分,这给了我一些缺失的问题。

【问题讨论】:

    标签: php mysql wordpress select where


    【解决方案1】:

    是的,您应该能够测试您的第一个内部 SELECT 查询,但您需要用一个测试值替换 tt.term_taxonomy_id 匹配:

    --UPDATE wi1_term_taxonomy tt SET count = ( /* This line is commented out by '--' */
    
      SELECT count(p.ID) FROM wi1_term_relationships tr 
      LEFT JOIN wi1_posts p ON 
        (p.ID = tr.object_id 
         AND p.post_type = 'product' 
         AND p.post_status = 'publish') 
      WHERE tr.term_taxonomy_id = <insert_test_value_here>
    
    --) WHERE tt.taxonomy = 'color' /* This line is commented out by '--' */
    

    只需为&lt;insert_test_value_here&gt; 插入一个有效值即可。

    【讨论】:

      【解决方案2】:

      我建议您使用以下方法测试查询:

      SELECT tr.term_taxonomy_id, count(p.ID)
      FROM wi1_term_relationships tr LEFT JOIN 
           wi1_posts p
           ON (p.ID = tr.object_id AND p.post_type = 'product' AND p.post_status = 'publish')
      

      并且您使用连接进行更新:

      UPDATE wi1_term_taxonomy tt join
             (SELECT tr.term_taxonomy_id, count(p.ID) as cnt
              FROM wi1_term_relationships tr LEFT JOIN 
                   wi1_posts p
                   ON (p.ID = tr.object_id AND p.post_type = 'product' AND p.post_status = 'publish')
              group by term_taxonomy_id
      WHERE tt.taxonomy = 'color';
      

      这允许您使用完全相同的查询来进行测试和更新。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-07-11
        • 1970-01-01
        • 2016-05-20
        • 2011-10-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-08-12
        相关资源
        最近更新 更多