Php 有条件地将查询中的元素插入另一个数据库表
我正在查询生成所需结果的两个表。我需要有条件地将这个结果数组中的元素插入到另一个表中。请原谅我缺乏理解,但我对php和mysql还相当陌生 结果字段为:Php 有条件地将查询中的元素插入另一个数据库表,php,mysql,Php,Mysql,我正在查询生成所需结果的两个表。我需要有条件地将这个结果数组中的元素插入到另一个表中。请原谅我缺乏理解,但我对php和mysql还相当陌生 结果字段为:总线id、年龄、种族和性别。我想有条件地将这些字段的元素插入到另一个包含以下字段的表中:bus\u id,no\u people,male,meetics% 结果数组中的总线id不=插入表中的总线id 例如,我想计算分配给特定公交id的人数,并确定人数、男性、女性和种族百分比 我的思维过程可能看起来很复杂,但请原谅我是个新手。如果你能给我指出正确
总线id、年龄、种族和性别
。我想有条件地将这些字段的元素插入到另一个包含以下字段的表中:bus\u id,no\u people,male,meetics%
结果数组中的总线id
不=插入表中的总线id
例如,我想计算分配给特定公交id
的人数,并确定人数、男性、女性和种族百分比
我的思维过程可能看起来很复杂,但请原谅我是个新手。如果你能给我指出正确的方向,我将不胜感激
好的,这是我查询的前两个表的结果表:
bus_name bus_id cus_name age race sex
DHL 10 tom selleck 32 asian male
Fedex 17 jennifer lopez 34 black female
UPS 1 jet li 26 black male
UPS 1 hugh douglas 40 black male
UPS 1 ray lewis 40 white male
UPS 1 michael vick 38 black male
UPS 1 ed reed 44 white male
UPS 1 joe flacco 17 white male
UPS 1 bob dole 26 latin male
UPS 1 deion sanders 15 white male
UPS 1 bill clinton 15 latin male
UPS 1 lebron james 41 white male
巴士名称巴士id客户姓名年龄种族性别
DHL 10 tom selleck 32亚洲男性
联邦快递17詹妮弗·洛佩兹34黑人女性
UPS 1李连杰26黑人男性
UPS 1 hugh douglas 40黑人男性
UPS 1 ray lewis 40白人男性
UPS 1 michael vick 38黑人男性
UPS 1 ed reed 44白人男性
UPS 1 joe flacco 17白人男性
UPS 1 bob dole 26拉丁男性
UPS 1 deion sanders 15白人男性
UPS 1比尔·克林顿15拉丁男性
UPS 1勒布朗·詹姆斯41白色男性
我想有条件地将这些元素插入另一个名为“comp_struct”的表中,该表有以下字段:总线id、男性、女性、种族%(可能会将其更改为多样性百分比)暂时忘记种族%
所以我希望它看起来像这样一旦完成
bus_id no_people males females
1 10 10 0
17 1 0 1
10 1 1 0
巴士识别号没有人男女
1 10 10 0
17 1 0 1
10 1 1 0
这就是我用代码生成第一个表结果的程度
$query1 = $db->query("SELECT bus.bus_name, bus.bus_id, bus_users.purch, bus_users.cus_name, bus_users.age, bus_users.race, bus_users.sex FROM bus, bus_users WHERE bus_users.purch = bus.bus_id ORDER BY bus.bus_name") or die($db->error);
while($result = mysqli_fetch_assoc($query1))
{
( "SELECT bus_id,
COUNT(*),
SUM(IF(sex='male', 1, 0)) AS males,
SUM(IF(sex='female', 1, 0)) AS females
FROM @query1
GROUP BY bus_id
INSERT INTO comp_struct (bus_id, no_people, males, females)
SELECT bus_id,
COUNT(*) AS no_people,
SUM(IF(sex='male', 1, 0)) AS males,
SUM(IF(sex='female', 1, 0)) AS females
FROM @query1
GROUP BY bus_id");
$query1=$db->query(“选择bus.bus\u名称、bus.bus\u id、bus\u用户.purch、bus\u用户.cus\u名称、bus\u用户.age、bus\u用户.race、bus\u用户.sex FROM bus、bus\u用户,其中bus\u用户.purch=bus.bus\u id按bus.bus\u名称排序”)或die($db->->错误);
而($result=mysqli\u fetch\u assoc($query1))
{
(“选择总线id,
计数(*),
总和(如果(sex='male',1,0))为男性,
作为女性的总和(如果(性别=女性),1,0)
来自@query1
按总线id分组
插入组件结构(总线id、无人员、男性、女性)
选择总线id,
将(*)算作“无”人,
总和(如果(sex='male',1,0))为男性,
作为女性的总和(如果(性别=女性),1,0)
来自@query1
按总线分组(“id”);
不用说,这不会产生期望的结果。暂时忽略种族字段,您可以通过以下方式获得所需的值:-
SELECT bus_id,
COUNT(*),
SUM(IF(sex='male', 1, 0)) AS males,
SUM(IF(sex='female', 1, 0)) AS females
FROM table_one
GROUP BY bus_id
并插入以下内容:-
INSERT INTO table_two(bus_id, no_people, males, females)
SELECT bus_id,
COUNT(*) AS no_people,
SUM(IF(sex='male', 1, 0)) AS males,
SUM(IF(sex='female', 1, 0)) AS females
FROM table_one
GROUP BY bus_id
编辑-根据您现在提供的详细信息,一条语句将按如下方式执行插入操作(无需先单独选择行)
编辑-这也可以让您了解种族:-
SELECT bus_id, no_people, males, females, GROUP_CONCAT(CONCAT(race, race_percentage, '%'))
FROM
(
SELECT Sub1.bus_id, Sub2.no_people, Sub2.males, Sub2.females, Sub1.race, (Sub1.race_count / Sub2.no_people) * 100 AS race_percentage
FROM
(
SELECT bus.bus_id ,
bus_users.race,
COUNT(*) AS race_count
FROM bus
INNER JOIN bus_users
ON bus_users.purch = bus.bus_id
GROUP BY bus.bus_id, race
) Sub1
INNER JOIN
(
SELECT bus.bus_id ,
COUNT(*) AS no_people,
SUM(IF(bus_users.sex ='male', 1, 0)) AS males,
SUM(IF(bus_users.sex ='female', 1, 0)) AS females
FROM bus
INNER JOIN bus_users
ON bus_users.purch = bus.bus_id
GROUP BY bus.bus_id
) Sub2
ON Sub1.bus_id = Sub2.bus_id
) Sub0
GROUP BY bus_id
SQL fiddle在这里提供:-
有一个计数()函数,它可以帮助您。您只需要在WHERE子句中指定正确的条件。或者您也可以在PHP中对它们进行计数。您需要编写一些代码,然后告诉我们它在哪里不起作用。我知道我必须使用count函数,但如何计算只分配给特定对象的结果元素“bus_id”,然后将该答案插入另一个表中。您可以使用SUM(IF(somefield='female',1,0))等语法而不是计数。但是,您可以添加表格定义、样本数据和样本结果吗?您如何计算种族百分比?或者总线id是否与种族相关?更新以与额外的表格详细信息一起使用W,这太神奇了!
SELECT bus_id, no_people, males, females, GROUP_CONCAT(CONCAT(race, race_percentage, '%'))
FROM
(
SELECT Sub1.bus_id, Sub2.no_people, Sub2.males, Sub2.females, Sub1.race, (Sub1.race_count / Sub2.no_people) * 100 AS race_percentage
FROM
(
SELECT bus.bus_id ,
bus_users.race,
COUNT(*) AS race_count
FROM bus
INNER JOIN bus_users
ON bus_users.purch = bus.bus_id
GROUP BY bus.bus_id, race
) Sub1
INNER JOIN
(
SELECT bus.bus_id ,
COUNT(*) AS no_people,
SUM(IF(bus_users.sex ='male', 1, 0)) AS males,
SUM(IF(bus_users.sex ='female', 1, 0)) AS females
FROM bus
INNER JOIN bus_users
ON bus_users.purch = bus.bus_id
GROUP BY bus.bus_id
) Sub2
ON Sub1.bus_id = Sub2.bus_id
) Sub0
GROUP BY bus_id