例如,我正在寻找一种在单个查询中获取group\u concat()函数的组的方法。
我的当前代码
SELECT
SUBSTRING_INDEX(GROUP_CONCAT(service_info.ip_address SEPARATOR ','),',',service_plans.aggregation) AS ip_address
FROM
services
LEFT JOIN
service_info
ON
service_info.service_id = services.id
LEFT JOIN
service_plans
ON
service_plans.id = services.service_plan_id
WHERE
service_plans.id = '2'
我想用一个特定的数字(如果您在查询中看到的话,$group\ U by变量)对ip地址进行分组,然后用一个不同的字符分隔,比如“:”或其他什么。
本质上,我希望我的输出看起来像:
如果$group\ U by=2:10.1.1.2,10.1.1.3:10.1.1.4,10.1.1.5
如果$group\ U by=3:10.1.1.2,10.1.1.3,10.1.1.4:10.1.1.5
这是否可以实现到我当前的查询中?
更新:表结构
表
service_plans `id | name | aggregation
5条答案
按热度按时间gxwragnw1#
------ 1 | 2 | Phone 2 | 2 | Laptop 3 | 2 | PC 4 | 2 | TV 5 | 2 | Test
表 service_info
id | service_id | ip_addressc86crjj02#
表 services
id | service_plan_id | description7uhlpewt3#
1 | 1 | 10.1.1.2 2 | 2 | 10.1.1.3 3 | 3 | 10.1.1.4 4 | 4 | 10.1.1.5 5 | 5 | 10.1.1.6
我试图得到一个数组的ip地址的串联和逗号分隔,但在一组的多少
service_plans.aggregation` 价值是。如果aggregation是2,那么我的输出应该是:10.1.1.2,10.1.1.3:10.1.1.4,10.1.1.5,正如您所看到的,它们是以2为一组的,然后下一组用冒号(:)分隔
如果aggregation是3,那么我的输出应该是:10.1.1.2,10.1.1.3,10.1.1.4:10.1.1.5,正如您所看到的,它们以3为一组,然后下一组用冒号(:)隔开,依此类推
qlfbtfca4#
你的帖子有点混乱。如果您发布了示例数据,然后发布了希望查询返回的内容,则会很有帮助。我会根据你帖子的主题回答你的问题。
服务计划
如果对serviceplanips运行此查询:
您将获得:
hmae6n7t5#
我不能保证这会用完的盒子,但它应该让你在正确的轨道上。希望有帮助。注意-如果您使用的是支持窗口函数的mysql版本,那么可以执行类似于下面的操作,并使用本机支持的rank函数,而不是手动使用变量。