2016-02-29 4 views
0

Итак, я запускаю этот php-скрипт в качестве заданий по обновлению cron для пользователей на табло.Обновление Mysql с более чем одним редактированием

<?php 
$servername = "localhost"; 
$username = "xxx"; 
$password = "xxx"; 
$dbname = "xxx"; 

// Create connection 
$conn = new mysqli($servername, $username, $password, $dbname); 
// Check connection 
if ($conn->connect_error) { 
    die("Connection failed: " . $conn->connect_error); 
} 

$sql = "UPDATE scoreboard SET points='23' WHERE id=2500"; 
if ($conn->query($sql) === TRUE) { 
    echo "Record updated successfully"; 
} else { 
    echo "Error updating record: " . $conn->error; 
} 

$conn->close(); 
?> 

Это прекрасно работает только один id в то время. Как я могу редактировать 3 id с разными точками? Благодарю.

+0

, где идентификатор в (2500, 2501, 2502) –

+2

выпуск 3 обновления. и обратите внимание, что '' 'и' '' не являются допустимыми символами кавычек в mysql OR php. не используйте текстовый процессор для редактирования кода. –

+0

Если вам нужно ... вы можете «обновить контрольные точки табло = случай, когда ID = 2500, тогда« 23 », когда Id =« XXXX », а затем« YY », когда ID =« YYYY », а затем« XX »заканчивается, где ID в (2500, 'XXXX', 'YYYY') ', но здесь есть более сильные обновления; или вы можете написать массивную вставку в таблицу и обновить ее из этой таблицы, если у вас есть большое количество записей для обновления с разными значениями. – xQbert

ответ

0

Если вы должны .. вы могли бы ...

update scoreboard 
set points = case when ID = 2500 then '23' 
        when Id = 'XXXX' then 'YY' 
        when ID = 'YYYY' then 'XX' end 
where ID in (2500,'XXXX','YYYY') 

Но отдельные обновления имеют больше смысла здесь. Вы можете написать массивную вставку в временную таблицу и обновить ее из этой таблицы, если у вас есть тысячи записей для обновления с разными значениями. Это может быть быстрее.

2

Обычно вы не обновляете 3 идентификатора для каждого запроса в списке пользователей для табло. Один запрос за раз работает очень хорошо, и в том числе 3 не ускоряются, если только у этих 3 игроков нет одинаковой оценки, но вы специально упомянули, что вам нужны 3 идентификатора с разными баллами для каждого.

Если речь идет о производительности/эффективности, использовать подготовленные заявления (mysqli's prepare) и использовать цикл после prepare(), в котором вы:

  1. bind() параметров (каждый раз на разных пользователей/точек)
  2. execute()