我是新的sql,我使用myphpadmin作为我的数据库,我试图控制列的显示,如果用户登录是否是管理。我显示的列来自两个不同的表,即TableA和Tableb。我确实组合了两个在列中具有公共值的表,如果登录的用户是管理员,那么需要显示的所有列都会显示,但是如果登录的用户是管理员,我不知道如何控制显示。
我有三张桌子的名字;
TableA:
id Name Section Grade status
1a aika Section1 A Active
2s B Inactive===========================================
TableB:
id PR_id Name Section
111 2s laika Section2
222 2s Bes Section3 用于在一起显示列的查询
SELECT * FROM TableA WHERE Name != ''
UNION
SELECT TableA.id, TableB.Name, TableB.Section, TableA.Grade, TableA.status
FROM TableA
INNER JOIN TableB ON TableA.id = TableB.PR_id产出是;
id Name Section Grade status
1a aika Section1 A Active
2s laika Section2 B Inactive
2s Bes Section3 B Inactive表用户
id username usertype
1 aika admin
2 den user
3 lina user如果艾卡是因为她是管理员而登录的话
所有这些列都将显示给行政部门。
id Name Section Grade status
1a aika Section1 A Active
2s laika Section2 B Inactive
2s Bes Section3 B Inactive但是,如果den/lina因为她是用户而登录,那么将只显示给她的列在下面,她将不会看到列级别
id Name Section status
1a aika Section1 Active
2s laika Section2 Inactive
2s Bes Section3 Inactive我正在尝试这个查询,但它不起作用,我非常感谢您的任何建议或建议/帮助。
Select usertype from Tableuser Where usertype='Admin'( SELECT * FROM TableA
WHERE Name != ''
UNION
SELECT TableA.id, TableB.Name, TableB.Section, TableA.Grade, TableA.status
FROM TableA
INNER JOIN TableB ON TableA.id = TableB.PR_id发布于 2018-07-17 15:07:58
我想你找错地方来解决你的问题了。实际上,您已经以两种不同的方式(通过phpMyAdmin和通过SQL查询进行限制)询问了这一点,我认为第三种方式是最好的解决方案。
通过phpMyAdmin
您可以通过phpMyAdmin和MySQL/MariaDB列级权限来限制这一点。这要求您为每个用户提供自己的MySQL/MariaDB用户帐户,这与Tableuser无关。我不建议这样做,因为您通常希望在应用程序中处理用户身份验证,而不是以MySQL/MariaDB用户的身份验证,但是您问了,下面是要做的事情:
首先,像平常一样创建新的用户帐户。然后,在生成的页面上(或任何时候从“用户帐户”选项卡编辑该用户),单击“数据库”子选项卡:

从列表中选择正确的数据库,然后单击Go。
下一页显示数据库级权限。这听起来好像你不想允许,但你的需求可能会有所不同。
再次查看顶部的“表”选项卡。这将带您进入表级权限。
为该用户选择适当的权限;例如,为除“等级”以外的所有列选择权限:

现在,您已经在数据库级别限制了用户帐户,使其无法从该列中进行选择。
一个警告是,当用户在phpMyAdmin中并尝试浏览该表时,他们将得到一个错误;这是因为phpMyAdmin试图运行一个"SELECT *.“查询表,当然权限会阻止这一点。最简单的解决方法是添加一个书签,它有一个类似于SELECT `id`, `name`, `section`, `status` FROM `TableA`的查询。将此书签命名为与表相同的名称,当用户单击Browse链接时,将使用它代替"SELECT *“查询。
结果:

通过你的申请
如果应用程序查询数据库,则可以动态生成适当的查询:SELECT `usertype` FROM `Tableuser` WHERE `id` = $userid;
然后使用一个简单的if测试;如果结果是'admin',将查询生成为SELECT `id`, `name`, `section`, `grade`, `status` FROM `TableA`,否则将查询设置为SELECT `id`, `name`, `section`, `status` FROM `TableA`。因为您可能正在构建“id”部分,这是处理这些问题的好方法。您还可以通过相同的测试向管理用户展示额外的功能,例如用户管理或节管理。(请注意,我使用的是一个简化的SELECT,与UNION/INNER查询相比,但是概念是相同的;我刚刚降低了复杂性,以提高可读性)
作为SQL查询
我认为您需要使用存储过程或函数来严格地在SQL中进行测试。没有原生MySQL/MariaDB风格SQL中的‘’if/SQL/SQL‘构造,根据管理测试的结果,我看不到执行两种不同查询的明显方法。有足够动力的人可能能够拼凑出一个案例陈述或如果陈述,但在几分钟的测试中,我无法得到任何你想要的东西(例如,在'sakila‘数据库中运行SELECT (SELECT IF(1>2,'`first_name`','`last_name`')) FROM `actor` WHERE 1`没有返回预期的结果)。我很乐意被证明是错误的,但这似乎是一个脆弱的测试,更好地作为应用程序级的逻辑处理。
发布于 2021-06-20 07:57:24
回答你的问题有点难,但我可以猜出来。您要寻找的不是在phpmyadmin中实现的。PhpAdmin显示所有表和表包含的所有内容。
要根据需要从phpAdmin中显示各种结果,您必须至少学习一种查询这些表中数据的编程语言。许多人学习和使用PHP,所以这将是一个很好的起点。
祝你的编程好运。
https://stackoverflow.com/questions/51381846
复制相似问题