1

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

假设我想要一个包含所有启用用户的选择框,这很容易做到。当用户正在编辑表单并拉出当前启用的用户,但当前选择的用户不是启用的用户时,我的麻烦就来了。

通常我的查询会是这样的

SELECT first_name, last_name from users WHERE enabled = 1

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

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

4

3 回答 3

4

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

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

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

于 2012-09-21T18:49:35.593 回答
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>";
}
于 2012-09-21T18:49:49.780 回答
0

我想我终于明白了这个问题。我可以解决此问题的最简单方法是加载所有用户,但仅在构建下拉列表时过滤它们。

下拉条件将变为:

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

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

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

于 2012-09-26T14:53:33.193 回答