在“数据库”列中搜索特定数字

时间:2012-10-18 17:24:04

标签: php mysql admin

我需要一个查询来在数据库中搜索数据库中同一列中列出的一组数字中的特定数字。

数据库Access将包含两列

第一栏:页面名称

第二栏:访问

将设置类似于:页面名称:Blog-Admin访问权限:60,61,62,76,83,94

其中Access列中的数字是允许查看页面的等级。

在每个页面上,都会有一个查询用户排名并将其存储在$ URank变量中。

每个页面都以变量($ PageName)命名,该变量将匹配Access数据库中的列页面名称

在此查询中,它需要在Access列中搜索该页面的用户排名(页面名称= $ PageName)

通过将其存储在数据库中,管理员可以修改谁可以在任何时间点访问哪些页面。

我只需要搜索数据库的查询,以确保用户排名有权访问该页面。

这可能非常简单,不确定。

我习惯于查询mysql_query(“select * from database where blahblah = viarable”)...所以如果可以用这种格式回答,那就太棒了。即使它的mysqli等同。

1 个答案:

答案 0 :(得分:1)

编辑:好的,听起来你正在做的是在Access列中存储允许排名的字符串这是一个非常糟糕的主意。它很难管理,需要在PHP中进行大量额外的工作。你应该做的是使用两个表,结构如下:

create table Pages (
    id int primary key auto_increment,
    name varchar(200)
);

create table Page_access (
    page_id int,
    rank int
);

因此,您将在Pages表中存储所有页面的列表(而不是其他任何内容)。然后,向Page_access表添加页面ID的所有可能组合(来自Pages表)和这些页面的已接受用户排名,因此Page_access可能如下所示:

|page_id | rank |
|   1    |  60  |
|   1    |  61  |
|   1    |  62  |
|   2    |  70  |
|   2    |  71  |

...等等这意味着你的桌子上可能会有数百行 - 这没关系!它是一个规范化的表,如果您对列进行索引,性能将不会受到影响。

或者,如果您知道自己总是要接受某个范围内的排名,那么您可以像这样构建Page_access表:

create table Page_access (
    page_id int,
    min_rank int,
    max_rant int
);

然后使用SQL between检查用户的排名是否在页面的最小和最大排名之间。我希望这有助于组织你的表,但我知道它仍然没有回答你原来的问题(如何编写SQL语句)。我建议确保你有一个好的表结构,然后在你尝试编写实际查询后再问一个更具体的问题。


原始回答:

假设您正在使用mysqli

#connect to your database
$mysqli = new mysqli('localhost', $database_username, $database_password, 'Access');

#prepare and run the query
if($stmt = $mysqli->prepare('select URank from Access where URank = ?')) {
    $stmt->bind_param('i', $URank);
    $stmt->execute();
    $stmt->bind_result($exists);
    $stmt->fetch();

    if($exists) {
        #the URank was found in the table
    } else {
        #not found
    }
    $stmt->close();
}

这样的事情应该可以解决问题。我建议您在使用上面的示例之前先阅读mysqliprepared statements。在编写数据库查询时,您确实需要了解自己在做什么。