背景
我在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而不是更新来快速测试查询,以便在我更改任何内容之前查看我的结果?另外,我每次都需要找到并重置更新的值。
到目前为止我尝试了什么
答案 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';
这允许您使用完全相同的查询,用于测试和更新。