2017-04-17 59 views
-1

我正在使用SQL查询来加载woocmmerce产品。woocommerce搜索sql

我的代码如下

SELECT ID,post_title,post_type, (select meta_value from wp_postmeta where meta_key='_sku' and post_id=ID) as sku 
FROM wp_posts,wp_postmeta 
where post_type='product' and post_status='publish' and post_id=ID 
group by ID 

在这段代码中,我想和SKU,帖子ID,文章标题搜索,所以我写了下面的代码的代码,这是不正常。

SELECT ID,post_title,post_type, (select meta_value from wp_postmeta where meta_key='_sku' and post_id=ID) as sku 
FROM wp_posts,wp_postmeta 
where post_type='product' and post_status='publish' 
    **AND (post_title LIKE 'WS1006%' OR sku LIKE 'WS1006%' OR ID LIKE 'WS1006%') 
group by ID** 
+0

这个查询化妆代码工作非常慢 它花费太多时间来完成动作 –

回答

0

您可以尝试下面的查询。

SELECT p.ID, p.post_title, 
    MAX(CASE WHEN pm1.meta_key = '_sku' then pm1.meta_value ELSE NULL END) as sku 
    FROM wp_posts p LEFT JOIN wp_postmeta pm1 ON (pm1.post_id = p.ID)     
    WHERE p.post_type in('product') AND p.post_status = 'publish' AND post_id=ID 
    GROUP BY p.ID 
+0

感谢清淳答复 –

+0

但我不能够underatand为什么你使用CASE表达式返回的值的最大 –

+0

的MAX() 。 在字符列MAX中查找整理序列中的最高值。 –

0

不能使用在WHERE条件使用别名作为条件的别名,你需要使用在having子句。

SELECT ID,post_title,post_type, (select meta_value from wp_postmeta where 
meta_key='_sku' and post_id=ID) as sku FROM wp_posts,wp_postmeta where 
post_type='product' and post_status='publish' group by ID Having (post_title 
LIKE '%WS1006%' OR sku LIKE '%WS1006%' OR ID LIKE '%WS1006%') 

这将工作。