PHP MySQL-SQL查询帮助
我有以下代码将用户添加到特定角色。代码工作正常,但我想更改SQL,这样它只会在角色不存在时将用户插入到角色中 非常感谢您的帮助。这是我的密码:PHP MySQL-SQL查询帮助,php,sql,mysql,Php,Sql,Mysql,我有以下代码将用户添加到特定角色。代码工作正常,但我想更改SQL,这样它只会在角色不存在时将用户插入到角色中 非常感谢您的帮助。这是我的密码: // ------------------------------------------------------------------ // ADD SELECTED USERS TO SELECTED ROLE // ------------------------------------------------------
// ------------------------------------------------------------------
// ADD SELECTED USERS TO SELECTED ROLE
// ------------------------------------------------------------------
if(isset($_POST['ddlAddSelected']) && $_POST['ddlAddSelected'] != 'Add To' && isset($_POST['checked']))
{
// get checked checkbox values - userId
$checked = array_map('intval',$_POST['checked']);
// get selected security role - role name
$selected_role = mysqli_real_escape_string($conn, $_POST['ddlAddSelected']);
// get role id from db
$get_role_id = mysqli_query($conn, "SELECT RoleId, RoleName FROM roles WHERE RoleName = '$selected_role' Limit 1")
or die($dataaccess_error);
// if roleId present
if(mysqli_num_rows($get_role_id) == 1)
{
$row = mysqli_fetch_array($get_role_id);
$role_id = $row['RoleId'];
$role_name = $row['RoleName'];
$i=1;
foreach($checked as $user_id)
{
// add selected users to role
$add_selected = mysqli_query($conn, "INSERT INTO users_in_roles(UserId, RoleId, RoleName) VALUES($user_id, $role_id, '$role_name')")
or die($dataaccess_error);
$count = $i++;
}
// if sucess
if($add_selected)
{
$msg = "<div class='msgBox3'>SUCCESS: ($count) USERS have been ADDED to ($selected_role) ROLE.</div>";
}
else
{
echo 'some error message here...';
}
}
}
elseif(isset($_POST['ddlAddSelected']) && $_POST['ddlAddSelected'] != 'Add To' && !isset($_POST['checked']))
{
$msg = $msg_error;
}
将唯一密钥UserId+RoleID添加到users_in_roles表中
Ps:为什么您还需要用户角色表中的角色名称字段
CREATE UNIQUE INDEX `user_role` ON `users_in_roles` (`UserId`, `RoleID`)
使用:
…以确保仅在角色不存在时插入该角色
SELECT将从变量中提取值-它实际上并不是从from子句中的表中进行选择,这只是为了使查询有效。刚刚添加了另一个查询,用于检查用户是否已经存在于所选角色中。它工作正常。zerkms,当我需要知道与id关联的角色名称时,它会保存一个额外的查询。对不起,我不确定“添加唯一密钥”是什么意思。你能解释一下你的意思吗?thanks@ScottW:我添加了一个查询来执行该操作Nice cheat从未见过+1@ScottW:数据库错误不是帮助您诊断问题的良好描述。列计数与行的值计数不匹配1@ScottW:看在上帝的份上,指定要插入的列;-在用户角色中插入用户ID、角色ID、角色名称。顺便问一下,我的答案是什么-我这样做了,但仍然不起作用。它将每个用户插入四次。我想尽一切办法都试过了。
INSERT INTO users_in_roles
SELECT $user_id, $role_id, '$role_name'
FROM users_in_roles
WHERE NOT EXISTS(SELECT NULL
FROM users_in_roles
WHERE userid = $user_id
AND roleid = $role_id)