我正在创建一个我有2个用户的应用程序。管理员和患者,因此每个帐户有2个用户。(管理员添加药物和其他待办事项列表供患者使用)。
管理员和患者都可以登录同一帐户,这就是为什么acc_id是他们之间的通用链接。
account_info(acc_id(pk, auto inc), p_username, a_username,password)
这些将在一页上输入。
之后,用户输入患者信息。他输入患者信息的地方。
patient_info ( p_username (pk), acc_id, p_fname,....)
admin_info
表与patient_info
如何以从account_info表中选择acc_id和p_username的方式编写插入代码,其余信息只是插入到表patient_info中。
到目前为止我的代码:
$sql = "INSERT INTO patient_info(p_username, acc_id, p_fname, p_lname,
p_gender, p_condition,
p_birthdate, p_emergencycontact)
SELECT p_username, acc_id
FROM account_info
VALUES(:p_fname, :p_lname, :p_gender, :p_condition, :p_birthdate,
:p_emergencycontact)";
我是php新手请不要downvote我理解逻辑,但我不知道如何写它
答案 0 :(得分:1)
不是为每个用户提供管理员密码和用户密码,而是使用类似于LDAP的权限模型,其中每个用户只有一次登录,但可以分配给一组标准角色,每个角色都包含特定权限
+----------+
| roles |
+----------+
| roleid |
| rolename |
+----------+
+---------------+
| role_join |
+---------------+
| rolejoinid |
| permission_id |
| role_id |
+---------------+
+-----------------+
| permissions |
+-----------------+
| permission_id |
| permission_name |
+-----------------+
+---------------+
| user_join |
+---------------+
| userjoinid |
| user_id |
| role_id |
+---------------+
+------------------+
| user |
+------------------+
| user_id |
| username |
| firstname |
| lastname |
| gender |
| condition |
| birthdate |
| emergencycontact |
+------------------+
这允许您为角色分配许多权限,并为许多用户分配角色。
然后将值添加到用户表中(user_id应为primary_key
和auto_increment
):
$sql = "INSERT INTO user(username, firstname, lastname,
gender, condition, birthdate, emergencycontact)
VALUES(:username, :firstname, :lastname,
:gender, :condition, :birthdate, :emergencycontact)";
另外,您是否考虑过使用MySQL Workbench软件来设置数据库? (类似的工具可用于其他数据库。)
<强>子查询强>
如果由于某些其他原因确实需要执行子查询,那么另一个SO问题将解释如何执行此操作:
SQL INSERT INTO with subquery and value
带参数的子查询
所以如果你想要一个子查询和参数的混合供用户输入,我想它会是这样的:
INSERT INTO patient_info(p_username, acc_id, p_fname, p_lname,
p_gender, p_condition, p_birthdate, p_emergencycontact)
SELECT p_username, acc_id, :p_fname, :p_lname, :p_gender, :p_condition, :p_birthdate, :p_emergencycontact
FROM account_info
(您只需将参数放入子查询中)