基于另一个表的条件更新表

问题描述:

我想更新所有的列,其中post_type = productpost_status = publish。此外,我需要进行加入,因为我只想更新那些帖子,其中Count(...)为0.基于另一个表的条件更新表

我想要计算meta meta_key LIKE "%product_shops_%_price%"

下面是表的两个例子:

wp441_posts:

| ID | post_status | post_type | 
-------------------------------- 
| 1 | publish | product | 
| 2 | darf  | product | 
| 3 | darf  | product | 
| 4 | publish | page | 
| 5 | publish | page | 
| 6 | publish | page | 
-------------------------------- 

wp441_postmeta:

| meta_id | post_id |  meta_key   | met_value | 
---------------------------------------------------------- 
| 1  | 1 | product_shops_0_price | 45.00 
| 2  | 1 | product_shops_1_price | 25.00 | 
| 3  | 1 | product_shops_2_price | 45.00 | 
| 4  | 2 |  thumbnail_url  | https://..| 
----------------------------------------------------------- 

例如。在这两张表中,我只想将ID 1的post_status设置为draft,因为这是我的条件匹配的唯一帖子。我在wp441_postmeta表格中有更多product_shops_%_price价格,我有一个帖子,目前在publish,它是一个'产品'。

我已经修修补补的声明,但是这个人是无连接的时刻:

SELECT COUNT(meta_key) FROM `wp441_postmeta` WHERE meta_key LIKE "%product_shops_%_price%" GROUP BY (post_id) 

现在我需要插入本声明的加入。但我不知道如何...有人可以帮我吗?

问候!

为您解释的情况下,更新wp441_posts.post_status重视draft其中:

  • post_type = 'product AND post_status = 'public'
  • 和具有匹配post_idwp441_postmeta.post_id超过1列,其中meta_key LIKE '%product_shops_%_price%'

的声明是这样的:

UPDATE wp441_posts p 
JOIN (
    SELECT pm.post_id 
    FROM wp441_postmeta 
    WHERE meta_key LIKE '%product_shops_%_price%' 
    GROUP BY pm.post_id 
    HAVING COUNT(*) > 0 
) pm 
    ON p.id = pm.post_id 
SET post_status = 'draft' 
WHERE pm.post_type = 'product' AND pm.post_status = 'publish' 

我认为你的LIKE应该与product_shops_%_price比较,没有额外的%签字在字符串的开始和结尾,但这是WordPress如何将值放在那里的具体内容。但请考虑一下。