php 更好的方式来条件变量,只是循环通过可能性?

wvt8vs2t  于 2023-01-12  发布在  PHP
关注(0)|答案(1)|浏览(121)

从小组中寻找一些知识,做了一些研究但没有真正找到任何东西,所以看看我是否能得到任何指针。
我的代码具有潜在的包含零到三个不同的选项。例如:MySQL查询将是:

$sql = "SELECT * FROM users";

我有三个下拉菜单要添加到其中,分别给予位置(loc)、系统(ss)和实体(entity)的位置,或者它们的组合。
我目前管理这个,它的工作原理是,通过php if语句来条件化查询,它的工作原理就像一个真值表来给予正确的查询。
下面的_where变量在项目出现并且是第一个项目时使用,如果有后续的添加,则使用_and。非常简单的东西。

if($loc > 0 && $ss > 0 && $entity > 0)  // 1 1 1
{
    $sql.= " $loc_where $ss_and $entity_and";
}
else if($loc > 0 && $ss > 0 && $entity == "") // 1 1 0
{
    $sql.= " $loc_where $ss_and";
}
else if($loc == "" && $ss > 0 && $entity > 0) // 0 1 1
{
    $sql.= " $ss_where $entity_and";
}
else if($loc > 0 && $ss == "" && $entity > 0) // 1 0 1
{
    $sql.= " $loc_where $entity_and";
}
else if($loc > 0 && $ss == "" && $entity == "") // 1 0 0
{
    $sql.= " $loc_where";
}
else if($loc == "" && $ss > 0 && $entity == "") // 0 1 0
{
    $sql.= " $ss_where";
}
else if($loc == "" && $ss == "" && $entity > 0) // 0 0 1
{
    $sql.= " $entity_where";
}
else // 0 0 0
{
    $sql;
}

有没有更好的方法来查看这三个选项,并创建所需的查询,而不需要在每个迭代中循环?也许可以查看哪些变量被设置,然后可以更智能地创建$sql?也许还可以合并更多的选项,如果将来需要它们,而不必创建一个很长的组合真值表。
感谢你的帮助。

r8xiu3jd

r8xiu3jd1#

你能试试这个吗:

$sql = "SELECT * FROM users ";

if ($loc > 0 || $ss > 0 || $entity > 0) {
    $sql.= " where id > 0 ";
    
    $sql.= $loc > 0 ? $loc_and : '';
    $sql.= $ss  > 0 ? $ss_and : '';
    $sql.= $entity > 0 ? $entity_and : '';
}

Where id > 0将始终为true,因此您只需将and部分添加到查询中,而无需担心where条件。

相关问题