Php “检索多个数据”;“系列”;只需一个mySQL查询
有没有一种方法可以将这两个查询合并为一个查询,这样我就可以检索两个数据“系列”以用于图表绘制,同时还可以维护单个日期的关系Php “检索多个数据”;“系列”;只需一个mySQL查询,php,mysql,charts,report,Php,Mysql,Charts,Report,有没有一种方法可以将这两个查询合并为一个查询,这样我就可以检索两个数据“系列”以用于图表绘制,同时还可以维护单个日期的关系 SELECT COUNT(j.id) AS power_count, jd.ber_rcvd FROM jobs j INNER JOIN job_dates jd ON jd.job_id = j.id WHERE j.tech = 7 AND jd.ber_rcvd !=
SELECT
COUNT(j.id) AS power_count, jd.ber_rcvd
FROM
jobs j
INNER JOIN job_dates jd
ON jd.job_id = j.id
WHERE j.tech = 7 AND jd.ber_rcvd != '0000-00-00' GROUP BY jd.ber_rcvd;
SELECT
COUNT(j.id) AS transport_count, jd.ber_rcvd
FROM
jobs j
INNER JOIN job_dates jd
ON jd.job_id = j.id
WHERE j.tech = 1 AND jd.ber_rcvd != '0000-00-00' GROUP BY jd.ber_rcvd;
我想要的是这样的输出:
power_count | transport_count | ber_rcvd11 | 3 | 2013-03-01
7 | 1 | 2013-03-02
电源计数|传输计数| ber | rcvd
11 | 3 | 2013-03-01
7 | 1 | 2013-03-02
使用
UNION ALL
时
SELECT COUNT(j.id) AS ber_count, jd.ber_rcvd
FROM jobs j
INNER JOIN job_dates jd
ON jd.job_id = j.id
WHERE j.tech = 7
UNION ALL
SELECT COUNT(j.id) AS ber_count, jd.ber_rcvd
FROM jobs j
INNER JOIN job_dates jd
ON jd.job_id = j.id
WHERE j.tech = 1
但是,
groupby
是一个更好的方法,正如@Seth所建议的那样使用UNION-ALL
看起来会是这样的
SELECT COUNT(j.id) AS ber_count, jd.ber_rcvd
FROM jobs j
INNER JOIN job_dates jd
ON jd.job_id = j.id
WHERE j.tech = 7
UNION ALL
SELECT COUNT(j.id) AS ber_count, jd.ber_rcvd
FROM jobs j
INNER JOIN job_dates jd
ON jd.job_id = j.id
WHERE j.tech = 1
但是,@Seth建议,
groupby
是一种更好的方法使用groupby函数:
SELECT j.tech, COUNT( j.id ) AS ber_count
FROM job j
INNER JOIN job_dates jd ON jd.job_id = j.id
WHERE j.tech IN ( 7, 1 )
GROUP BY j.tech;
这应该给你两行,一行表示tech=1,一行表示tech=7。使用GROUP BY函数时,COUNT()将应用于每个分组
在回答更新的问题时,请尝试以下操作:
SELECT COUNT( IF(j.tech=7,1,NULL)) AS power_count, COUNT( IF( j.tech = 1, 1, NULL )) AS transport_count, jd.ber_rcvd
FROM
jobs j
INNER JOIN job_dates jd
ON jd.job_id = j.id
WHERE j.tech IN ( 1, 7 ) AND jd.ber_rcvd != '0000-00-00'
GROUP BY jd.ber_rcvd;
如果不是这样,请发布一些示例数据供我们使用。使用分组功能:
SELECT j.tech, COUNT( j.id ) AS ber_count
FROM job j
INNER JOIN job_dates jd ON jd.job_id = j.id
WHERE j.tech IN ( 7, 1 )
GROUP BY j.tech;
这应该给你两行,一行表示tech=1,一行表示tech=7。使用GROUP BY函数时,COUNT()将应用于每个分组
在回答更新的问题时,请尝试以下操作:
SELECT COUNT( IF(j.tech=7,1,NULL)) AS power_count, COUNT( IF( j.tech = 1, 1, NULL )) AS transport_count, jd.ber_rcvd
FROM
jobs j
INNER JOIN job_dates jd
ON jd.job_id = j.id
WHERE j.tech IN ( 1, 7 ) AND jd.ber_rcvd != '0000-00-00'
GROUP BY jd.ber_rcvd;
如果不是这样,请发布一些示例数据供我们使用。也许可以在它们之间添加
UNION
?@MikeChristensen更好的方法是UNION ALL
请发布建议的更正查询,以便我能看到如何正确实施UNION
或UNION ALL
。谢谢。我想尝试一下UNION
和groupby
,因为我想知道哪一个更快。也许可以在它们之间添加UNION
?@MikeChristensen更好,但是UNION ALL
请发布建议的更正查询,这样我就可以看到如何正确地实现UNION
或UNION ALL
。谢谢。我会尝试使用联合
和分组方式
,因为我想知道哪一种更快。请参阅编辑的OP以进一步解释所需的输出。这非常接近,但它会为每个日期生成两行。我需要每个日期都是一行。如果您将j.tech
从groupby
中删除,它将正常工作!谢谢尝试从GROUP BY子句中删除,j.tech
。你能给我一些样本数据吗?可能是两个表的转储?请查看已编辑的OP以进一步解释所需的输出。这非常接近,但它为每个日期生成两行。我需要每个日期都是一行。如果您将j.tech
从groupby
中删除,它将正常工作!谢谢尝试从GROUP BY子句中删除,j.tech
。你能给我一些样本数据吗?也许是一堆你的两张桌子?