0

背景

我在wordpress.org 论坛上找到了一些代码。我想修改它,以便根据我是否设置自定义字段来设置计数器。在我的情况下,如果自定义字段的键为“过期”且值 =“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 但许多不同的错误让我放弃了。
  • 我试图打破中间的选择部分,这给了我一些缺失的问题。
4

2 回答 2

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>,它应该可以工作。

于 2013-07-29T20:05:31.627 回答
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';

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

于 2013-07-29T20:20:03.583 回答