MySQL - 选择而不是更新以进行测试

时间:2013-07-29 19:48:04

标签: php mysql wordpress select where

背景

我在wordpress.org forum上找到了一些代码。我想修改它,以便根据我是否设置自定义字段来设置计数器。在我的情况下,如果自定义字段的密钥为“expired”且值为“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'

缺少自定义字段部分

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

问题 - 选择结果?

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

我是否可以通过select而不是更新来快速测试查询,以便在我更改任何内容之前查看我的结果?另外,我每次都需要找到并重置更新的值。

到目前为止我尝试了什么

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

2 个答案:

答案 0 :(得分: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 '--' */

只需插入<insert_test_value_here>的有效值即可。

答案 1 :(得分:0)

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

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';

这允许您使用完全相同的查询,用于测试和更新。