php - 有条件地将查询中的元素插入到另一个数据库表中

标签 php mysql

我正在查询两个产生所需结果的表。我需要有条件地将此结果数组中的元素插入到另一个表中。请原谅我的不理解,但我对 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:-

http://www.sqlfiddle.com/#!2/c8c9c/1

关于php - 有条件地将查询中的元素插入到另一个数据库表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21574827/

相关文章:

mysql - Google Data Studio - 防止聚合

MySQL插入硬编码值数组

php - Laravel 5.5 mailgun 不发送电子邮件 - 没有错误

javascript - 使用表单动态更改地址栏中的 URL 第 2 部分

php - 如何使用具有组写入权限的 file_put_contents 创建文件?

php - 使用 PHP 将 HTML 表单数据插入 MySQL

mysql - WordPress 太多重定向 IIS 服务器

rhel6 上的 php pdo_informix - 未实现可选功能

javascript - 带有 'Quantity' 下拉列表的 PHP 表单可将输入的数据行插入到表单中

mysql - 为每个学生创建一个表。它被认为是一种不好的做法吗?