2010-05-23 3 views
0

Я пытаюсь создать цикл, который будет выводить несколько операторов where для запроса MySQL. В конце концов, моя цель состоит в том, чтобы в конечном итоге с этими четырьмя отдельными Где заявления:Использование массива для циклического преобразования через MySQL Где заявление

`fruit` = '1' AND `vegetables` = '1' 
`fruit` = '1' AND `vegetables` = '2' 
`fruit` = '2' AND `vegetables` = '1' 
`fruit` = '2' AND `vegetables` = '2' 

Мой теоретический код вставлен ниже:

<?php 

$columnnames = array('fruit','vegetables'); 
$column1 = array('1','2'); 
$column2 = array('1','2'); 

$where = ''; 
$column1inc =0; 
$column2inc =0; 

while($column1inc <= count($column1)) { 
    if(!empty($where)) 
    $where .= ' AND '; 
    $where = "`".$columnnames[0]."` = "; 
    $where .= "'".$column1[$column1inc]."'"; 

    while($column2inc <= count($column2)) { 
     if(!empty($where)) 
     $where .= ' AND '; 
     $where .= "`".$columnnames[1]."` = "; 
     $where .= "'".$column2[$column2inc]."'"; 

      echo $where."\n"; 

    $column2inc++; 
} 

$column1inc++; 
} 

?> 

Когда я запускаю этот код, я получаю следующий вывод:

`fruit` = '1' AND `vegetables` = '1' 
`fruit` = '1' AND `vegetables` = '1' AND `vegetables` = '2' 
`fruit` = '1' AND `vegetables` = '1' AND `vegetables` = '2' AND `vegetables` = '' 

Кто-нибудь видит, что я делаю неправильно? Благодарю.

ответ

1

Я предлагаю следующий код:

$columnnames = array('fruit','vegetables'); 
$column1 = array('1','2'); 
$column2 = array('1','2'); 

$list = array(); 
for($i = 0; $i < count($column1); $i++) { 
     for($k = 0; $k < count($column2); $k++) { 
       $str = sprintf("`%s` = `%d` AND `%s` = `%d`", 
         $columnnames[0], 
         $column1[$i], 
         $columnnames[1], 
         $column2[$k] 
       ); 
       $list[] = $str; 
     } 
} 

echo implode(' AND ', $list); 

Приветствия,
Fabian

+0

Этот код интересный. Хотя он расчесывает все 4 заявления в одном, похоже, что он делает в значительной степени то, что я хочу. Я немного манипулирую и посмотрю, что произойдет. Спасибо за очистку моего кода. – Ryan

1

Вы никогда не возвращаете $where.

BTW. Не принимайте

if(!empty($where)) 
$where .= ' AND '; 
$where = "`".$columnnames[0]."` = "; 

как это опасно двусмысленно. У

if(!empty($where)) $where .= ' AND '; 
$where = "`".$columnnames[0]."` = "; 

или

if(!empty($where)) { 
    $where .= ' AND '; 
} 
$where = "`".$columnnames[0]."` = "; 
+0

Понял, спасибо! – Ryan

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