2015-01-19 2 views
0

У меня есть следующий код - он создает серию запросов, отправленную в базу данных:PHP Loop - работа с непоследовательными итерациями

$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, но затем идет q14a, q14b, q14c, q14d и q14e, а затем из q15 в q54.

Я просмотрел продолжение, но это больше для пропущенных итераций и не помогло мне.

Я изо всех сил пытаюсь адаптировать приведенный выше код для обработки этой непоследовательной ситуации. Любые идеи и предложения приветствуются.

+4

Когда поля db названы \ пронумерованы, обычно это означает, что его неправильно спроектировано –

+1

@Dagon - не мог согласиться больше - однако, это то, с чем мне приходится иметь дело :-( –

+2

@ Дагон на моей первой работе Я унаследовал db, в котором только значимые имена столбцов были 'id', остальные были просто' a', 'b',' c', ... и т. Д. То же самое применимо к именам таблиц. Было весело. – zerkms

ответ

2

У меня есть поля, которые идут от до q13, но затем идут q14a, q14b, q14c, q14d и 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;"; 
} 

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

  • Нет связанных вопросов^_^