0

我正在寻找一种更有效的加载多选列表的方法,这个理论可以适用于许多情况。我这样做的方式会导致很多查询,我想知道是否有办法在两个数据库查询中做到这一点。

DB Table : users: fields= (userID, name)
       data: 1, Dan
       data: 2, Cory
       data: 3, Matt
DB Table : users_selected: fields(userSelectedID, userID)
       data: 1,1

现在使用 php 我通常会执行以下操作:

<?php 
 $q = 'SELECT userID,name FROM users';
 $r = mysql_query($r);
 echo '<select id="assignToID" name="assignToID[]" multiple="assignToID">';
 while($e = mysql_fetch_array($r){
     //this is where you have to query the db each time... theres got to be a better way
     $q2 = 'SELECT userSelectedID FROM user_selected WHERE userID = "'.$e['userID'].'" ';
     $r2 = mysql_query($q2);
     $nr = mysql_num_rows($r2);
     if($nr>0){
        $sel = ' selected="selected" ';
     }
     else{
        $sel = '';
     }
     echo '<option '.$sel.' value="'.$e['userID'].'"'>'.$e['name'].'</option>';

 }
 echo '</select>'
?>

所以上面我们必须在循环中查询我们在数据库中的每个用户。有没有办法使用 PHP array_merge 或以某种方式只为所有用户进行一次查询,然后附加他们被选中的天气......只是试图找到一个更优雅和有效的解决方案。

非常感谢

4

1 回答 1

1

是的,有这样一种方法,可以在 1 个 SQL 查询中得到你需要的东西。

SELECT * FROM users
LEFT OUTER JOIN user_selected
ON users.userID = user_selected.userID

这个 LEFT OUTER JOIN 应该并且将会从表 users 中生成一组完整的记录,而不是来自 user_selected 的匹配记录(如果可用)。如果没有匹配,右侧将只包含 null。

于 2012-07-06T18:52:40.910 回答