php - 如何构造数据库中的一些数据以便以后检索

标签 php mysql database

我有一组复选框,管理员可以勾选这些复选框来授予用户权限。就我而言,管理员可以单击这些复选框:Image on ImageShack 。这些复选框将允许用户查看这些国家/城市的数据。

http://img205.imageshack.us/img205/4170/screenshotao.png

我正在绞尽脑汁做以下事情:

1) 如何最好地将此权限插入我的数据库 2) 稍后如何计算出每个用户被允许的权限

目前,我正在考虑为每个复选框添加大量列到我的数据库中,并在那里放置 1 或 0。然后使用大量 if 函数检查这些!这在编码时会浪费时间。

还有什么我可以做的吗?我感谢任何帮助!

最佳答案

您需要SET data type 。 SET 或多或少是一个 bit field其中每个位都有一个名称:

ALTER TABLE user ADD COLUMN permissions SET(
    'States',
    'Cities',
    'Africa',
    'Asia',
    'Australia',
    'Europe',
    ...
);

选择可以查看亚洲数据的用户:

SELECT * FROM user WHERE FIND_IN_SET('Asia',permissions) > 0;

或者选择可以查看亚洲和欧洲但不能查看非洲的所有用户:

SELECT * FROM user WHERE permissions & 40 = 40 AND !(permissions & 4)

我会在 PHP 中进一步定义这些常量,那么你的代码应该非常可读:

define('PERMISSION_STATES', 1);
define('PERMISSION_CITIES', 2);
define('PERMISSION_AFRICA', 4);
define('PERMISSION_ASIA', 8);
define('PERMISSION_AUSTRALIA', 16);
define('PERMISSION_EUROPE', 32);
# ...

# Check if user can view data for Africa
if ($user['permissions'] & PERMISSION_AFRICA) {
    # ...

# Check if user can Asia and Europe but not Africa
if ($user['permissions'] & PERMISSION_ASIA
    && $user['permissions'] & PERMISSION_EUROPE
    && !($user['permissions'] & PERMISSION_AFRICA)) {
    # ...

关于php - 如何构造数据库中的一些数据以便以后检索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1382992/

相关文章:

mysql - Godaddy 数据库连接问题

node.js - 社交网络中 "Likes"的数据库设计 (MongoDB)

php - 使用 session->set_flashdata 导致 502 Bad gateway 错误

php - array_combine 在 foreach 循环中组合数组值

php - 使用 PHP CURL 显示 PDF 文件只会产生奇怪的文本

此 INSERT 上的 MySQL 错误 #1064?

mysql - 数据库结构-加入或不加入

php - mysql 计算唯一的单元格组合,空

database - 专业的数据库,如 BigTable、SimpleDB

php - 更新 mySQL 列