对MySQL表进行解构操作
P粉549986089
P粉549986089 2023-08-29 18:24:12
[MySQL讨论组]
<p>我想知道是否可以将这个输出更改为:</p> <pre class="brush:php;toolbar:false;">User Database Select Insert Update Delete Create References Alter Drop ------------- ------------------ ------ ------ ------ ------ ------ ---------- ------ -------- mysql.session performance_schema 1 0 0 0 0 0 0 0 mysql.sys sys 0 0 0 0 0 0 0 0</pre> <p>变成这样:</p> <pre class="brush:php;toolbar:false;">Users Privileges performance_schema sys ----- ---------- ------------------ --- mysql.session Select 1 mysql.session Insert 0 mysql.session Update 0 mysql.session Delete 0 mysql.session Create 0 mysql.session References 0 mysql.session Alter 0 mysql.session Drop 0 mysql.sys Select 0 mysql.sys Insert 0 mysql.sys Update 0 mysql.sys Delete 0 mysql.sys Create 0 mysql.sys References 0 mysql.sys Alter 0 mysql.sys Drop 0</pre> <p>我使用的查询语句是:</p> <pre class="brush:php;toolbar:false;">SELECT DISTINCT USER &quot;User&quot;, db &quot;Database&quot;, IF(Select_priv = 'Y', '1 ', '0') AS &quot;Select&quot;, IF(Insert_priv = 'Y', '1 ', '0') AS &quot;Insert&quot;, IF(Update_priv = 'Y', '1', '0') AS &quot;Update&quot;, IF(Delete_priv = 'Y', '1', '0') AS &quot;Delete&quot;, IF(Create_priv = 'Y', '1', '0') AS &quot;Create&quot;, IF(References_priv = 'Y', '1', '0') AS &quot;References&quot;, IF(Alter_priv = 'Y', '1', '0') AS &quot;Alter&quot;, IF(Drop_priv = 'Y', '1', '0') AS &quot;Drop&quot; FROM mysql.db ORDER BY USER, Db;</pre> <p>任何帮助将不胜感激。提前谢谢!</p>
P粉549986089
P粉549986089

全部回复(1)
P粉481815897

这是一个“unpivot”的示例:

(SELECT User AS Users, 'Select' AS Privileges, 1 AS PrivOrder, MAX(CASE db WHEN 'performance_schema' THEN Select_priv='Y' END) AS `performance_schema`, MAX(CASE db WHEN 'sys' THEN Select_priv='Y' END) AS `sys` FROM db GROUP BY User)
UNION
(SELECT User, 'Insert', 2, MAX(CASE db WHEN 'performance_schema' THEN Insert_priv='Y' END), MAX(CASE db WHEN 'sys' THEN Insert_priv='Y' END) FROM db GROUP BY User)
UNION
(SELECT User, 'Update', 3, MAX(CASE db WHEN 'performance_schema' THEN Update_priv='Y' END), MAX(CASE db WHEN 'sys' THEN Update_priv='Y' END) FROM db GROUP BY User)
UNION
(SELECT User, 'Delete', 4, MAX(CASE db WHEN 'performance_schema' THEN Delete_priv='Y' END), MAX(CASE db WHEN 'sys' THEN Delete_priv='Y' END) FROM db GROUP BY User)
UNION
(SELECT User, 'Create', 5, MAX(CASE db WHEN 'performance_schema' THEN Create_priv='Y' END), MAX(CASE db WHEN 'sys' THEN Create_priv='Y' END) FROM db GROUP BY User)
...
ORDER BY Users, PrivOrder;

抱歉,无法自动根据查询找到的数据为每个模式定义列的透视或反透视查询。在查询开始读取数据之前,必须在查询中设置列。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号