2017-11-29 1 views
-4

mysqli 테이블에서 많은 행을 업데이트하는 방법은 무엇입니까? 여기 내 테이블 (tbmath)이PHP MySQLi - 한 프로세스에서 수식을 사용하여 여러 데이터 업데이트

|id | code |a | b | c | 
| 1 | 1  |11 | 11 |  | 
| 2 | 1  |12 | 22 |  | 
| 3 | 1  |13 | 33 |  | 
| 1 | 2  |11 | 11 |  | 
| 2 | 2  |12 | 22 |  | 
| 3 | 2  |13 | 33 |  | 

... 코드는 동작 규칙이다 코드 1 = A + B; 코드 2 = a x b;

우선 코드 = 1로 C를 업데이트하려고 시도하지만 잘못된 결과가 표시됩니다. 누군가이 코드를 수정하거나 문제 해결에 도움이 될 수 있기를 바랍니다. 여기에 내 코드 :

<?php 
$db_host="localhost"; 
$db_user="root"; 
$db_pass=""; 
$db_database="test"; 
$con = new 
mysqli($db_host,$db_user,$db_pass,$db_database); 

$sql=mysqli_query($con,"SELECT * FROM tbmath 
WHERE code = 1"); 
while ($a=mysqli_fetch_assoc($sql)) 
{ 
    $c=$a['a']+$a['b']; 
    mysqli_query($con,"UPDATE `tbmath` SET `c` = '$c' 
    WHERE `code` = 1"); 
} 
?> 

결과는 다음과 같습니다

|id | code | a | b | c | 
| 1 | 1  |11 | 11 |46 | 
| 2 | 1  |12 | 22 |46 | 
| 3 | 1  |13 | 33 |46 | 
| 1 | 2  |11 | 11 | | 
| 2 | 2  |12 | 22 | | 
| 3 | 2  |13 | 33 | | 

내 코드는 마지막 결과 13 + 33

내 경우에 적합한 PHP 코드는 무엇을 계산? 누군가가 나를 도울 수 있기를 바랍니다.

+1

왜이 모든 것을 데이터베이스에 저장 하시겠습니까? 하나의 값 집합과 작업이있는 별도의 테이블 만 있으면됩니다. 그러나 이것을 원한다면 하나의 쿼리로 SQL에서 모든 작업을 수행 할 수 있습니다. – jeroen

+0

@jeroen "나는"당신의 "질문"을 보았다, 나는 단지 응답을 보지 못했다. 나는 그들의 반응 시간이 'NULL'인 것 같다. –

+0

@ Fred-ii- 아마도 1- 쿼리 솔루션을 통해 머리를 긁적니다 .-) – jeroen

답변

0

코드 필드가 아닌 where 필드에서 id 필드 param을 사용해야합니다. 코드를 가져 오는 것이 1 개의 데이터 세트와 같기 때문입니다.

$db_host="localhost"; 
$db_user="root"; 
$db_pass=""; 
$db_database="test"; 
$con = new 
mysqli($db_host,$db_user,$db_pass,$db_database); 

$sql=mysqli_query($con,"SELECT * FROM tbmath 
WHERE code = 1"); 
while ($a=mysqli_fetch_assoc($sql)) 
{ 
    $c=$a['a']+$a['b']; 
    mysqli_query($con,"UPDATE `tbmath` SET `c` = '$c' 
    WHERE `id` = $a['id']"); 
} 
+1

'a [ 'id']'을 혼동하게 만듭니다. 정의되지 않은 상수. –

+0

죄송합니다, $ a [ 'id']을 (를) 추가하지 않았습니다 :) 내 업데이트 된 답변 – FGDeveloper

+0

열 ID가 고유하지 않은 것을 다시 한번 확인하십시오. 이것은 예상대로 작동하지 않을 것입니다;) – Cashbee

2

각 작업 유형마다 하나의 업데이트를 수행 할 수 있으므로 많은 항목이 db에있을 때 전체 프로세스가 빨라집니다.

UPDATE tbmath 
SET c = a + b 
WHERE code = 1; 

UPDATE tbmath 
SET c = a * b 
WHERE code = 2; 

id 열이 고유하지 않은 것으로 지적하고 싶습니다. 그게 의도적 인거야? 일반적으로 ID는 고유합니다.) 이 코드는 고유하지 않더라도 고유 한 ID는 코드/프레임 워크에서 다른 문제를 일으킬 수 있습니다.

+0

축하해, 나는 그것을 보지 못했다. 나는 당신의 해결책을 +1했다. – FGDeveloper

+0

Im이 단일 업데이트 작업에 id를 사용했지만 모든 항목을 업데이트하기 위해 한 번 클릭해야하는 경우가 있습니다. –