选择“已启用”行以及当前选定的行

时间:2012-09-13 12:27:21

标签: php mysql

我有一张用户表。每个用户都有一个启用标志,该标志为1或0.

假设我想要一个包含所有已启用用户的选择框,这很容易做到。当用户修改表单时,我的问题就出现了,它会启动当前启用的用户,但当前所选用户不是已启用的用户。

通常我的查询类似于

SELECT first_name, last_name from users WHERE enabled = 1

但是,如果这是一个编辑表单,并且当前所选用户不再启用,并且用户提交表单,我将丢失当前选定的用户。

处理此问题的最佳方法是什么?我能想到的唯一方法是在查询中创建一个连接,该连接也可以获得当前启用的用户,但我想知道是否有更好的方法。主要是因为我们的一些表单在页面上的5个或6个位置具有此用户字段,我将不得不进行5或6个不同的查询,以便我可以获得当前用户。

3 个答案:

答案 0 :(得分:4)

如果您在生成下拉列表之前可以获取所选用户的ID,则只需在查询中添加OR子句。

  

SELECT first_name,last_name from users WHERE enabled = 1 OR user_id =?

这将保证先前选择的用户出现在列表中。在所有情况下添加OR子句是安全的(无论是否启用了所选用户)。

答案 1 :(得分:0)

如果当前用户未启用,您可以编写一个仅被调用的函数。

$result=your_database_version('select username from users where enabled=1');
$found = false;
user_options = '';
while($row=your_db_fetch_array($result)){
    $selected = '';
    if($current_user == $row['user']) {
        $found = true;
        $selected = 'selected';
    }
    $user_options.="<option value='{$row['user']}' $selected>{$row['user']}</option>";
}
if(!$found) {
    $user_options .= add_current_user($current_user);
}

function add_current_user($current_user) {
    //Get info from database for $current_user
    $row=your_db_fetch_array($result)
    return "<option value='{$row['user']}' selected>{$row['user']}</option>";
}

答案 2 :(得分:0)

我想我终于明白了这个问题。我能够解决这个问题的最简单方法是加载所有用户,但只在构建下拉菜单时对其进行过滤。

下拉条件将变为:

if ($user['enabled'] || $user['id'] == $lead['admin']) { ... }

您可以在SQL中使用JOIN条件执行相同的操作,但如果表单上存在多个角色,则需要更多工作。

是否加载所有用户是一个问题,我不知道:)