MySQL在新行上划分显示结果

时间:2015-08-12 08:03:58

标签: php mysql

我遇到了MySQL查询的困难。

数据库如下所示:

Name   Unit    Int
---------------------
A1     Kilo    20
A1     Price   5
A2     Kilo    15
A2     Price   3 

这是我正在尝试做的事情:

| Name | Unit  |  int  |
|  A1  | Kilo  |  20   |
|  A1  | Price |  5    |
|  A1  | K/P   |  4    |
|  A2  | Kilo  |  15   |
|  A2  | Price |  3    |
|  A2  | K/P   |  5    |

如您所见,我想为每个A1和A2插入一个新行,结果为Kilo除以Price。

这甚至可以吗? 如果是这样,有人能指出我正确的方向吗?我在这里很迷茫,最近几天试图扫过网络,结果很好。我尝试过的想法比我想要的更多。

2 个答案:

答案 0 :(得分:3)

您可以在SELECT中执行类似的操作,使用最新的可用数据即时计算(因此,如果Price / Kilo要更改,则可以防止存储稍后可能过时的内容):

SELECT `kilo`.`name`, (`kilo`.`int` / `price`.`int`) AS 'K/P' FROM `stuff` AS `kilo`
LEFT JOIN `stuff` AS `price` ON (`kilo`.`name` = `price`.`name`)
WHERE `kilo`.`unit`='Kilo' AND `price`.`unit`='Price';

这将返回:

+------------+
| name | K/P |
|------------|
| A1   | 4   |
| A2   | 5   |
+------------+

如果您真的想将其插入数据库,可以INSERT ... SELECT以上内容。像这样:

INSERT INTO `stuff` (`name`, `unit`, `int`)
 SELECT `kilo`.`name`, 'K/P', (`kilo`.`int` / `price`.`int`) FROM `stuff` AS `kilo`

LEFT JOIN `stuff` AS `price` ON (`kilo`.`name` = `price`.`name`)
WHERE `kilo`.`unit`='Kilo' AND `price`.`unit`='Price';

请参阅完整的SQL Fiddle示例here

答案 1 :(得分:3)

您可以使用

获得所有结果
SELECT * FROM (
    (SELECT * FROM your_table_name)
    UNION
    (SELECT r1.Name as Name, 'K/P', r1.Int/r2.Int
        FROM your_table_name r1, your_table_name r2 
        WHERE r1.Name=r2.Name AND r1.Unit='Kilo' AND r2.Unit='Price'
    )
) AS derived_table
ORDER BY Name, FIELD(Unit,'Kilo','Price','K/P');