2012-07-23 2 views
0

MySQL 테이블에 삽입 된 마지막 항목의 값을 x %만큼 증가시킨 다음 해당 값을 데이터베이스에 삽입하고 루프가 끝날 때까지 계속하기 시작합니다.For 루프는 이전 행의 값을 증가시키고 삽입합니다.

행 번호 1에서 $base_value이 100으로 시작한다고 가정 해 봅시다. 반복에서이 값을 25 % 씩 늘리고 싶습니다. 그래서 두 번째 행에서 나는 100을 25 % 증가 시키길 원합니다. 행 번호 3에서 행 번호 2의 값이 25 % 증가한 등, 루프가 100에 도달하면 루프가 중지됩니다. 어떻게 수행 할 수 있습니까? 이 같은

$base_value = 100; 
$increase_by; // x percent 

for($i = 1; $i = 100; $i++) 
{ 
    mysql_query("insert into table values(
     '', 
     '$i', 
     '' 
    )"); 
} 
+2

초등 수학? –

+2

우선, PHP가 이상한 일을하지 않는 한'for' 루프 조건이 잘못되었습니다. 두 번째 문장은'$ i <= 100'이어야합니다. 그렇지 않으면 조건이 false로 시작하기 때문에 루프가 전혀 실행되지 않을 것이라고 생각합니다. – David

+0

순수 SQL에서이 작업을 수행 할 수 있습니다. 마지막 행을 얻기 위해서'SELECT'를하고, 원하는 값을 검색하고, + 25 % (value/100 * 25)를 계산 한 다음,'INSERT'에 새로운 값을 사용하십시오. –

답변

1

뭔가주의해야 할

$base_value = 100; 
$increase_by; // x percent 

for($i = 1; $i <= 100; $i++) 
{ 
    mysqli_query("insert into table values(
     '$base_value', 
     '$i', 
     '' 
    )"); 
    $base_value = $base_value + ($base_value * $increase_by); 
} 

몇 가지? : : 나는 mysqli_querymysql_query 교체 한

  • 을, 그리고 당신이 동일 할 좋습니다. PHP also suggests this.
  • for 루프의 종료 조건을 $i = 100에서 $i <= 100으로 변경했습니다. 전자가 전혀 작동하지 않는다면 나는 그 행동이 무엇인지 확신 할 수 없다. 그것은 조건부로 설정$i입니다. 먼저 무엇이든 이 아니며을 원합니다. 그러나 이것은 또한 결코 실행되지 않거나 할당 문을 부울 값으로 해석하는 방법에 따라 무기한 실행된다는 것을 의미합니다. 이 두 옵션 중 어느 것도 바람직하지 않습니다.
  • 이 수학에서는 $increase_by이 올바른 소수 자릿수라고 가정합니다. 대신 "25 %"의 개념을 "25"의 실제 값으로 나타내면이 불일치를 고려하여 수학을 조정해야합니다.
  • SQL 쿼리 자체는 그다지 효과가 없었습니다. 그러나 단지의 경우에, 당신은 아마도 첫 번째 행에서 0이다 나쁜 생각 : 그냥 재미를 위해
0

및 가정 값 인 테이블이 table라는 것을 세 번째 불필요한 값을 가지고 있음을 지적 가치 대안으로이 u 리가 기본 키인 SQL 조회가 있습니다.

$base_value = 100; 
$factor = 1.25; // Take previous value and times it by 125% 

// ... 

mysqli_query(
"INSERT INTO table (my_value) 
SELECT (my_value * $factor) AS my_value FROM table ORDER BY uid DESC LIMIT 1" 
); 

$base_value *= $factor; 

// ... 

그러나 시험없이, 동시 작업을하고있는 경우이 안정적으로 작업에 포함되지 않습니다, 나의 거미 감각은 테이블이 비어있는 경우 난관이 첫 번째 반복에 타격을받을 것이라고 말했다. 어쨌든, 자유롭게 의견을 말하십시오. 분명히, @ 데이비드의 해결책은 더 합리적입니다 :)

관련 문제