2010-06-29 56 views
0
$query = "SELECT users FROM tabl ORDER BY RAND()"; 
$result = mysql_query ($query) 
    or die ("Query '$query' failed with error message: \"" . mysql_error() . '"'); 

while ($row = mysql_fetch_array($result)) { 
    $users[] = $row[0]; 
} 

$current = end($users); 
$partners = array(); 
foreach ($users as $user) 
{ 
     $partners[$user] = $current; 
     $current = $user; 
} 
print_r($partners); 

$query2 = "UPDATE tabl SET partner = {$partners[0]} WHERE users = '$users'"; 
mysql_query ($query2) 
    or die ("<br>Query '$query2' failed with error message: \"" . mysql_error() . '"'); 

這就是我正在使用的代碼。在query2之前一切都很好。我試過了我能想到的所有變化,但沒有任何效果。如何從數組更新表格?

表上有兩個字段:用戶和合作夥伴。代碼以隨機順序拉取用戶,然後將它們分配給彼此成圈。我需要使用作業來填充合作伙伴字段。

回答

1

廣場foreach循環內更新查詢,那麼你的合作伙伴和用戶變量,而跳水手入陣以後:

foreach ($users as $user) 
{ 
     $partners[$user] = $current; 
     $current = $user; 
     $query2 = "UPDATE tabl SET partner = '{$partners[$user]}' WHERE users = '{$user}'"; 
     mysql_query ($query2) 
      or die ("<br>Query '$query2' failed with error message: \"" . mysql_error() 
} 
+0

這是一個很好的解決方案,但取決於有多少$用戶,這可能會導致對數據庫進行多次查詢。 – Rob 2010-06-29 15:06:13

+1

是真的,但如果他試圖給每個用戶分配一個不同的合作伙伴,那麼你將無法避免多個查詢...... – Jon 2010-06-29 15:08:32

+0

這是一個快速而簡單的修復,雖然我懷疑OP中的整個部分可能有點崩潰。 – 2010-06-29 15:11:20

0

使用WHERE users IN ('.implode(',',$users).')'

0

我的代碼更改:

$current = end($users); 
$partners = array(); 
foreach ($users as $user) 
{ 
    $partners[$user] = $current; 
    $current = $user; 
    $query2 = "UPDATE tabl SET partner = {$partners[$user]} WHERE users = '$user'"; 
    mysql_query ($query2) 
     or die ("<br>Query '$query2' failed with error message: \"" . mysql_error() . '"'); 
} 
print_r($partners); 

但你也可以做取決於你想要的結果如下:

$userList = join(',', $users); 
$query2 = "UPDATE tabl SET partner = {$partners[0]} WHERE users IN ($userList)"; 
mysql_query ($query2) 
    or die ("<br>Query '$query2' failed with error message: \"" . mysql_error() . '"'); 
+0

您的頂級解決方案與Jon的相同,但是後來出現了,最下面的解決方案沒有解決,但沒關係 – David 2010-06-29 15:30:39

+0

當你很慢時會發生這種情況。:) – Joseph 2010-06-29 15:38:35