2012-07-06 31 views
0

我正在尋找一種更有效的加載mutliselect列表的方法,該理論可應用於許多情況。我這樣做的方式導致許多查詢,我想知道是否有辦法在兩個分貝查詢中做到這一點。使用PHP的MultiSelect加載效率

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

U檢查我的答案了嗎? – 2012-07-06 21:55:41

回答

1

是的,有這樣一種方法,以獲得您需要在1個SQL查詢中。

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

這LEFT OUTER JOIN,應該而且會產生一套完整的從表的用戶recors的,witht他匹配的記錄(如果可用)從user_selected。如果沒有匹配,則右側將包含空值。

+0

是的完美我只用了LEFT JOIN到現在。我需要開始進一步研究OUTER JOIN。 – 2012-07-10 16:20:47

+0

其實這不是我尋找的,因爲user_selected表將隨着時間的推移而增長,您將使用PHP來確保您沒有重複的用戶。 – 2012-07-19 18:04:48