我正在查询两个产生所需结果的表。我需要有条件地将此结果数组中的元素插入到另一个表中。请原谅我的不理解,但我对 php 和 mysql 还很陌生。
结果字段是:bus_id、age、race 和 sex
。我想有条件地将这些字段的元素插入到另一个包含以下字段的表中:bus_id、no_people、males、females 和 ethnicity%
。
结果数组中的 bus_id
= Insert 表中的 bus_id
。
例如,我想计算分配给特定 bus_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
我想有条件地将这些元素插入另一个名为“comp_struct”的表中,该表具有以下字段:bus_id、男性、女性、种族%(可能会将其更改为多样性百分比)暂时忘记种族%。
所以我希望它在完成后看起来像这样。
bus_id no_people males females 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");
不用说,这并没有产生预期的结果。
最佳答案
暂时忽略 ethnicity 字段,你可以通过以下方式获得你想要的值:-
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
编辑 - 根据您现在提供的详细信息,一条语句将按如下方式进行插入(无需先单独选择行)
INSERT INTO table_two(bus_id, no_people, males, females)
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
编辑 - 这也让您了解种族:-
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 here for it:-
关于php - 有条件地将查询中的元素插入到另一个数据库表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21574827/