简体   繁体   中英

How to total up entries in a database

I'm using a MySQL database which has a 'Staff' column. Example:

ID    BUSINESS    STAFF
1     Business 1  Bob
2     Business 2  Bill
3     Business 3  Paul, Bill
4     Business 4  Bob

I'm aiming to create a pie chart showing how many businesses each member of staff has, using the Google Charts API, and I'm having trouble counting total amounts.

The chart uses the formatting:

var data = google.visualization.arrayToDataTable([
['Staff', 'Business'],
['Bob',     2],
['Bill',     2],
['Paul',      1]
]);

How would I go about echoing a count of these lines? I've spent a fun 40 minutes messing up COUNT queries, with absolutely no joy.

I develop this code according your question ,you should change according your table and fields also change server configuration server name,user,password,database

    $server="server";
    $user="user";
    $password="password";
    $database="database";
    $cid=mysql_connect($server,$user,$password);
    mysql_select_db($database,$cid);
    $query="select * from table";
    $rs=mysql_query($query,$conn);
    $val=0;
    while($row=mysql_fetch_array($rs))
    {
    $data=$row['business'];
    $val=$val+trim(str_replace("Business","", "$data"));
    }
    $total=$val;

I used this code and i found total ;

There is a common theme in the comments here and that is normalization . As a rule it is A Bad Thing to represent multiple values as a comma-separated list in a single column.

Here is a working example of an alternate DB design that should get you going in the right direction:

create table staff
(
id int unsigned not null primary key auto_increment,
staffName varchar(250),
unique key `staffUIdx1` (staffName)
) ENGINE=InnoDB;

create table business
(
id int unsigned not null primary key auto_increment,
businessName varchar(250),
unique key `staffUIdx1` (businessName)
) ENGINE=InnoDB;

CREATE TABLE staffBusiness
(
id int unsigned not null primary key auto_increment,
staffId int unsigned not null,
businessId int unsigned not null,
unique key `staffBusinessUIdx1` (staffId,businessId),
CONSTRAINT `fk_staffBusiness_staff1` FOREIGN KEY (`staffId`) REFERENCES `staff` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION,
CONSTRAINT `fk_staffBusiness_business1` FOREIGN KEY (`businessId`) REFERENCES `business` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB;

insert into staff (staffName) values ('Bob');
insert into staff (staffName) values ('Bill');
insert into staff (staffName) values ('Paul');
insert into staff (staffName) values ('George');


insert into business (businessName) values ('Business 1');
insert into business (businessName) values ('Business 2');
insert into business (businessName) values ('Business 3');
insert into business (businessName) values ('Business 4');

insert into staffBusiness (staffId,businessId) 
select s.id,b.id from staff s join business b 
where s.staffName = 'Bob' and b.businessName in ('Business 1','Business 4'); 

insert into staffBusiness (staffId,businessId) 
select s.id,b.id from staff s join business b 
where s.staffName = 'Bill' and b.businessName in ('Business 2','Business 3'); 

insert into staffBusiness (staffId,businessId) 
select s.id,b.id from staff s join business b 
where s.staffName = 'Paul' and b.businessName in ('Business 3'); 

...and then the query would look like this:

select staffName as Staff,count(sb.id) as Business
from staff s
left outer join staffBusiness sb on s.id = sb.staffId
group by staffName;

I've included a 4th member of staff called 'George' to show that a normalized approach allows you to have members of staff with no business too.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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