我正在寻找一种更有效的加载mutliselect列表的方法,这种理论适用于许多情况。我这样做会导致很多查询,我想知道是否有办法在两个数据库查询中执行此操作。
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或者某种方式为所有用户做一个查询然后追加他们被选中的天气......只是想找到一个更优雅和有效的解决方案。
非常感谢
答案 0 :(得分:1)
是的,有一种方法可以在1个SQL查询中获得所需的内容。
SELECT * FROM users
LEFT OUTER JOIN user_selected
ON users.userID = user_selected.userID
此LEFT OUTER JOIN,应该并且将从表用户生成一组完整的记录,并且与user_selected匹配记录(如果可用)。如果没有匹配,则右侧将包含null。