如何填充虚拟MySQL表中的值?

时间:2016-05-18 05:11:17

标签: mysql

我有一个有效的解决方案,但我想知道是否有人能想出更好的方法来获得相同的结果。

我有两个表,一个用于设备,另一个用于。每个设备都可以插入0到4行。我正在运行的查询只是为了获取单个设备的行的设置。因此,我过滤设备表只返回一行。由于我需要在一行中获得结果,因此我使用GROUP_CONCAT

设备具有MAC地址,我正在过滤设备以获取该值。

Devices

的示例
+-------------+------------------+

| DeviceID    | MACAddress       |

+-------------+------------------+

| 900         | 'FFFFBBBB5555' |

+-------------+------------------+

Lines

的示例
+---------+-------------+-----------------+-------------------+

| LineID | DeviceID | LineNumber | Settings |

+---------+-------------+-----------------+-------------------+

| 100    | 900      | 1          | '{"scan":240, "enabled":true}'

| 101    | 900      | 3          | '{"scan":30, "enabled":false}'

+---------+-------------+-----------------+-------------------+

- 对不起表格布局,我不知道如何在starkoverflow.com中建立一个好的表格 :( -

我正在运行的查询是获取设备可以拥有的4条可能线路的线路设置。所以我总是需要4个设置,并用null填补空白。

SELECT
    Devices.DeviceID,    
    CONCAT( '[', GROUP_CONCAT( IFNULL( Lines.Settings, 'null' ) ORDER BY pad.LineNumber ), ']' ) AS settings_json_array
FROM
    Devices
    LEFT JOIN (
        SELECT 1 AS LineNumber
        UNION SELECT 2 AS LineNumber
        UNION SELECT 3 AS LineNumber
        UNION SELECT 4 AS LineNumber
    ) pad
        ON true 
    LEFT JOIN Lines
        ON ( Lines.DeviceID = Devices.DeviceID AND Lines.LineNumber = pad.LineNumber )
WHERE
    Devices.MACAddress='FFFFBBBB5555';


结果是一行

+------------+----------------------------------------------------------------------------------+

| DeviceID | settings_json_array |

+------------+----------------------------------------------------------------------------------+

| 900      | '[{"scan":240, "enabled":true},null,{"scan":30, "enabled":false},null]' |

+------------+----------------------------------------------------------------------------------+

我想摆脱丑陋的pad虚拟桌

非常感谢你。

0 个答案:

没有答案