2015-09-25 73 views
1

任何人可以帮助我得到的结果形式多个SQL请求:绑定多个查询到一个结果

SELECT * 
(COUNT(*) AS Records FROM wp_posts WHERE post_type='news' AND post_status='publish') as News, 
(COUNT(*) AS Records FROM wp_posts WHERE post_type='promotion' AND post_status='publish') as Promos, 
(COUNT(*) AS Records FROM wp_posts WHERE post_type='contact' AND post_status='publish') as Contacts 
FROM wp_posts 

我只是想通过发送一个SQL请求,找出定制我的WP MySQL的多少职位。

回答

4

没有必要在子查询所有:

SELECT 
    SUM(CASE WHEN post_type='news' THEN 1 ELSE 0 END) AS News, 
    SUM(CASE WHEN post_type='promotion' THEN 1 ELSE 0 END) AS Promos, 
    SUM(CASE WHEN post_type='contact' THEN 1 ELSE 0 END) AS Contacts 
FROM wp_posts 
WHERE post_status='publish'; 

甚至更​​短:

SELECT 
    SUM(IF(post_type='news', 1, 0)) AS News, 
    SUM(IF(post_type='promotion', 1, 0)) AS Promos, 
    SUM(IF(post_type='contact', 1, 0)) AS Contacts 
FROM wp_posts 
WHERE post_status='publish'; 
+0

这个人是一个好方法! +1 –

+0

也许计数(CASE WHEN post_type ='news'THEN 1 END)稍快些? – jarlh

+1

@jarlh好吧,我不喜欢隐式的NULL,我会说这是味道的问题 – lad2025

1

使用UNION ALL到查询组合(他们需要有相同的列数)

SELECT * FROM (
SELECT 1 
UNION ALL 
SELECT 2 
) 
1

可以发出一个与三个嵌套SELECT查询选择和得到的结果为列:

SELECT 
(SELECT COUNT(*) FROM wp_posts WHERE post_type='news' AND post_status='publish') as News, 
(SELECT COUNT(*) FROM wp_posts WHERE post_type='promotion' AND post_status='publish') as Promos, 
(SELECT COUNT(*) FROM wp_posts WHERE post_type='contact' AND post_status='publish') as Contacts 
+0

非常感谢@MrTux – qqruza

+0

@qqruza更新,有一个C&P错误 – MrTux