2010-06-29 52 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