Использовать массив для циклического просмотра оператора MySQL Where - PullRequest
0 голосов
/ 23 мая 2010

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

`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` = ''

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

Ответы [ 2 ]

1 голос
/ 23 мая 2010

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

$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

1 голос
/ 23 мая 2010

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

Кстати.Не делайте

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

, поскольку это опасно неоднозначно.Do

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

или

if( !empty( $where ) ) {
  $where .= ' AND ';
}
$where = "`".$columnnames[0]."` = ";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...