2015-01-19 4 views
0

I가 다음과 같은 코드 -이 데이터베이스로 전송되는 일련의 쿼리 생성 : 내가 가진 문제는 간단하다PHP 루프 - 비 순차적 반복 처리

$a = 'q'; 
$aa = 1; 
$r = "$a$aa"; 
$q = 54; 

while($aa <= $q){ 
$query .= "SELECT COUNT(". $r .") as Responses FROM tresults;"; 
$aa = $aa + 1; 
$r = "$a$aa"; 
} 

, 데이터베이스 내에서을의 번호가 순차적이지 않습니다.

나는 q1에서 q13로 이동 필드가하지만 q15에서 q54에 다음 q14a, q14b, q14c, q14dq14e하고 간다.

나는 을 보았습니다.을 계속했습니다. 그러나 그것은 반복을 건너 뛰고 더 많은 도움을주었습니다.

이 비 연속적인 상황을 처리하기 위해 위의 코드를 적용하는 데 어려움을 겪고 있습니다. 어떤 아이디어와 제안도 환영합니다.

+4

db 필드의 이름이 \ numbered 인 경우 대개 해당 설계가 잘못되었음을 의미합니다. –

+1

@Dagon - 그러나 더 이상 동의 할 수 없습니다. - 그럴 필요가 있습니다 .--( –

+2

@Dagon for my first job 나는 단지 의미있는 컬럼 이름이'id' 인 db를 상속 받았고, 다른 것들은'a','b','c', ... 등이었습니다. 테이블 이름에도 동일하게 적용되었습니다 .. – zerkms

답변

2

나는 q1에서 q13로 이동 필드가하지만 q14a, q14b, q14c,간다및 q14e 다음에 q15에서 q54까지입니다.

for($i=1; $i<=54; ++$i) { 
    if($i != 14) { 
    echo 'q' . $i . "<br>"; 
    } 
    else { 
    for($j='a'; $j<='e'; ++$j) { 
     echo 'q14' . $j . "<br>"; 
    } 
    } 
} 

당신이 번호의 순서로 문을 실행할 필요가없는 경우 카운터가 14 인 경우에, 당신은 또한 단지 첫 번째 루프를 건너 뛸 수있는 다음 중첩되지 않은 (두 번째 루프가 첫 번째로), 그 후에 q14s 않습니다.

0

당신은 그들이 q 시작 있는지 확인하기 위해 테이블 ​​및 테스트에서 열을 얻을 수 (또는 사용하십시오 preg_match) 수 :

$result = query("DESCRIBE tresults"); 

while($row = fetch($result)) { 
    if(strpos($row['Field'], 'q') === 0) { 
     $query .= "SELECT COUNT(". $r .") as Responses FROM tresults;"; 
    } 
} 

또는 열 배열을 구축하고 그것을 사용 :

$columns = array('q1', 'q2', 'q54'); //etc... 

foreach($columns as $r) { 
    $query .= "SELECT COUNT(". $r .") as Responses FROM tresults;"; 
}