简体   繁体   English

Mysql Select 带有嵌套的 If 和 count

[英]Mysql Select With nested If and count

need help with my code please sorry I just post short raw of my query here is the full one需要我的代码帮助,抱歉,我只是发布了我的查询的简短原始内容,这是完整的

SELECT si_visit.company, IF(si_visit.company='SIPES',COUNT(IF(si_visit.visit_type='Regular',1, NULL)),COUNT(IF(si_visit.visit_type='Regular',1, NULL))) 'Regular',
IF(si_visit.company='SIPES',COUNT(IF(si_visit.visit_type='Installation',4, NULL)),COUNT(IF(si_visit.visit_type='Installation',1, NULL))) 'Installation', 
IF(si_visit.company='SIPES',COUNT(IF(si_visit.visit_type='Emergency',4, NULL)),COUNT(IF(si_visit.visit_type='Emergency',1, NULL))) 'Emergency', 
IF(si_visit.company='SIPES',COUNT(IF(si_visit.visit_type='Cancellation',1, NULL)),COUNT(IF(si_visit.visit_type='Cancellation',1, NULL))) 'Cancellation', 
IF(si_visit.company='SIPES',COUNT(IF(si_visit.visit_type='Remotely',1, NULL)),COUNT(IF(si_visit.visit_type='Remotely',1, NULL))) 'Remotely', 
COUNT(*) AS Total 
FROM si_visit INNER JOIN si_visit_type WHERE si_visit_type.visit_name= si_visit.visit_type  
GROUP BY si_visit.company

what i need is to count the Emergency, Installation as 4 if the company name is SIPES other count it as 1 and the php code is我需要的是如果公司名称是 SIPES,则将紧急安装计数为 4,其他计数为 1,而 php 代码为

$statement = $connection->prepare($query);
$statement->execute();
$filtered_rows = $statement->rowCount();
$statement = $connection->prepare($query . $query1);
$statement->execute();
$result = $statement->fetchAll();
$data = array();
foreach($result as $row){
$sub_array = array();
//$sub_array[] = $nub;
$sub_array[] = $row["company"];
$sub_array[] = $row["Regular"];
$sub_array[] = $row["Emergency"];
$sub_array[] = $row["Remotely"];
$sub_array[] = $row["Installation"];
$sub_array[] = $row["Cancellation"];
$sub_array[] = $row["Total"];
$data[] = $sub_array;
}
echo json_encode($data);

and my database tables is :我的数据库表是:

CREATE TABLE `si_visit` (
`id` int(11) NOT NULL,
`c_id` int(11) NOT NULL,
`visit_type` varchar(255) NOT NULL,
`engineer_name` varchar(255) NOT NULL,
`company` varchar(255) NOT NULL,
`notes` text NOT NULL,
`visit_date` date NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Visits table for Clients';

CREATE TABLE `si_visit_type` (
`id` int(11) NOT NULL,
`visit_name` varchar(255) NOT NULL,
`visit_count` int(11) NOT NULL 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Visit type and count for it';
INSERT INTO `si_visit_type` (`id`, `visit_name`, `visit_count`) VALUES
(1, 'Regular', 1),
(2, 'Installation', 4),
(3, 'Emergency', 4),
(4, 'Cancellation', 1),
(5, 'Remotely', 1);

when i query it it count all as 1 i try it a lot of method all gives me error using mysql with MariaDB当我查询它时,它全部算作 1 我尝试了很多方法都给我错误使用 mysql 和 MariaDB

what i do wrong??我做错了什么?? Please if u can help请如果你能帮忙

Thank you all for your help, I just figured out i used count and that is count the row I just change it to sum and it come out right Thank you everyone.谢谢大家的帮助,我刚刚发现我使用了计数,那就是计算行,我只是将其更改为 sum,结果正确,谢谢大家。

  SELECT si_visit.company,
 IF(si_visit.company='SIPES',SUM(IF(si_visit.visit_type='Regular',1, 0)),SUM(IF(si_visit.visit_type='Regular',1, 0))) 'Regular',
IF(si_visit.company='SIPES',SUM(IF(si_visit.visit_type='Installation',4, 0)),SUM(IF(si_visit.visit_type='Installation',1, 0))) 'Installation',
IF(si_visit.company='SIPES',SUM(IF(si_visit.visit_type='Emergency',4, 0)),SUM(IF(si_visit.visit_type='Emergency',1, 0))) 'Emergency',
IF(si_visit.company='SIPES',SUM(IF(si_visit.visit_type='Cancellation',1, 0)),SUM(IF(si_visit.visit_type='Cancellation',1, 0))) 'Cancellation',
IF(si_visit.company='SIPES',SUM(IF(si_visit.visit_type='Remotely',1, 0)),SUM(IF(si_visit.visit_type='Remotely',1, 0))) 'Remotely', COUNT(*) AS Total
FROM si_visit INNER JOIN si_visit_type WHERE si_visit_type.visit_name= si_visit.visit_type GROUP BY si_visit.company

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM