编写SQL和if语句比较数据库中的两个项目的最佳方式


best way to write sql and if statement comparing two items inside a database

尝试编码一个新概念;然而,我不确定它是否会起作用。在这一点上,我只是在玩弄一个想法。

我的数据库中有一个名为defaultpermissions的表我有两列,name和status其中name是权限状态是开还是关(1或0)

那么我就有一个defaultpermissions页面上的复选框列表,管理员可以设置保存默认权限。

对于每个复选框,它检查该权限是打开还是关闭(1或0)。

最好的方法是什么?

  1. 我是否必须为每个权限运行一个新的查询(获取$status其中$name = '$permission')
  2. 或者我可以做一些事情来比较两个列在一个while语句中的每个权限一次?

对不起,这太笼统了,但在这一点上,这只是一个概念,我试图弄清楚,希望得到一些帮助。

的例子:

一些权限

  • Add Page[复选框]
  • 隐藏页面[复选框]
  • 删除页面[复选框]
  • 添加内容[复选框]
  • 编辑内容
  • 实时编辑器
数据库:

  • name = addpage status = 0
  • name = hidepage status = 1
  • name = removepage status = 0
  • name = addcontent status = 1

等。等。

对于每一个,它需要比较行'name'和'status'来找出它是否已经激活,这样它就知道是否要勾选这个框。我不介意为每个权限做一个新的查询,但有一些,所以我认为这可能是一件坏事。现在有大约20个默认的权限选项可以在这个页面上勾选。谢谢你的提前输入

注:半PHP新手,边走边学习…如果有更好的设置方法,请告诉我。

解决问题的简单方法如下:

  • 添加一个隐藏的输入字段,用于保存您的权限状态(使用您的示例,这将是1或0
  • 使用PHP时,使用类似于下面的语句:

'<input type="checkbox" name="input Name Here" value="1"' . ($dbRow['Status'] == 1 ? ' checked="checked"' : '') . ' />';

上面所做的是使用从db select中找到的状态,并使用该状态默认复选框。

  • 接下来你可以做一个方法(我使用开关语句在这种情况下),看看复选框和隐藏字段的值是否匹配。

$checkBoxVal = ($_GET['checkBoxName'] ?1: $_POST['checkBoxName'] ?1: 0));

$hiddenVal = ($_GET['hiddenFieldName'] == 1 || $_POST['hiddenFieldName'] == 1 ?1: 0);

if ($checkBoxVal <>hiddenVal美元){

do updates here

}//如果

的作用是查看你的复选框是否被选中。如果是,则$checkBoxVal将为1

然后将其与隐藏输入的最后一个值进行比较。

如果他们的隐藏字段是0,你勾选你的方框并提交你的表单,值将不相同,然后你可以做你需要的更新。

对我来说,这是一个伟大的方式来改变数据库中的任何东西,如果初始值改变(也就是说,如果你不使用jQuery $.ajax或XHR请求来动态地做到这一点。)

如果你需要更多的信息或需要一个例子,请告诉我。

希望这对你有帮助。祝你好运。=)

编辑:

您的查询应该使用复选框选择您想要更改的行。

SELECT name, status FROM defaultpermissions

然后你将使用php的mysql_fetch_assoc函数对结果查询,就像这样

,(行=美元作用(结果)美元){

//使用$row作为你的返回行在这里做你的输入字段

}//结束WHILE循环

也许这样会更清楚一些=)

我认为你很有方向感。为了改进设计,识别……可能是个好主意。

  • 所有权限名称/概念
  • 所有权限状态(如果权限名之间的值相同,则为相同)

现在您有了所有的信息,分析一个复选框是否正确地表示您想要表示的内容。例如,复选框可以很好地表示权限是否被授予,但表示与true/false无关的状态就不那么好了。

如果后者不是您的情况,您将能够创建一个列表,其中包含代表默认权限集状态的标签和复选框。查询将类似于

还要考虑添加另一个列来授予用户权限。您可以使用用户名来过滤每个用户的权限集和默认集。例如…

Select * from permissionsets where user like 'default' >> this will return the default set.
Select * from permissionsets where user like 'user1' >> this will return user1 permission set.

你认为这会有用吗?谢谢!

@leo