我有一个 int 列。它将用户的信息存储为标志。我创建了一个标志表,以便一些数字对应于一些属性。
例如:
用户标志:7
标志表值意味着:
1= Full account
2= Has access room1
4= Has access room2
8= Has access room2
So 7 = 1 | 2 | 4 (user has => full acc and has access room1&2)
我想将所有用户标志显示为文本(不是整数,我的意思是计算文本)(在示例 7 中表示 FULL_ACCOUNT+HAS_ACCESS_ROOM_1+HAS_ACCESS_ROOM_2)这可能吗?或者有什么更好的方法可以在 phpmyadmin 中直观地分析所有用户信息(300+)?
谢谢!
比较乱。
笔记:
CASE
如果 "and" (&
) 产生任何非零值,则将看到 "true"。CASE
(没有ELSE
)会生成NULL
.CONCAT_WS
, 给定所有NULLs
, 将生成NULL
.COALESCE
变成.NULL
_FULL_ACCESS
(1<<3)
为 8。这是一种将位位置转换为 INT 的方法。flag_table
查找访问表达式,它会更加混乱。由于您专门询问了如何在 phpMyAdmin 中执行此操作,因此我对您的选择进行了一些思考。在 phpMyAdmin 中,您可以通过引用的值轻松显示外键,但要对其进行按位运算的结果需要更多的复杂性。它很接近,但并不能完全捕捉到您要在这里表达的内容。
有一个转换功能,它允许您编写自己的插件(因为目前发行版中不存在这样的插件),但如果您熟悉 PHP,插件是相对较小的代码。很有可能您可以在命令行上计算它并使用“外部”转换来运行一些外部程序(例如 shell 脚本),这将导致返回的结果直接显示在 phpMyAdmin 中。这需要编写一些小的 shell 脚本或其他程序来找到正确的值,但可能是另一种解决方案。
Rick James 提供的解决方案是在 SQL 中解决此问题的绝佳方法。我还要补充一点,这种逻辑和计算通常应该在应用程序中完成;我看到管理员直接从 phpMyAdmin 引用它是多么有用,但大多数设置、更改和查看该值在您的应用程序中得到更好的处理。