2010-06-29 8 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() . '"'); 

Это код, с которым я работаю. Все хорошо до запроса2. Я пробовал все варианты, о которых я могу думать, но ничего не работает.Как обновить таблицу из массива?

В таблице есть два поля: пользователи и партнеры. Код вытаскивает пользователей в произвольном порядке, а затем назначает их друг другу по кругу. Мне нужно заполнить поля партнеров заданиями.

ответ

1

Место запроса обновления внутри цикла Еогеасп, то у вас есть партнер и пользовательские переменные в руки, не углубляясь в массив позже:

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

+1

true, но если он пытается назначить другого партнера для каждого пользователя, тогда вы не сможете избежать нескольких запросов ... – Jon

+0

Это быстрое и легкое исправление, хотя я подозреваю, что весь сегмент в OP может немного рухнуть. –

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

Ваше верхнее решение было таким же, как у Джона, но пришло позже. Нижнее не получилось, но все в порядке. – David

+0

Это то, что происходит, когда вы медленны. :) – Joseph

Смежные вопросы