|
|
|
| Имеется ряд переменных, ну или массив, это неважно, у каждой переменной есть статус, допустим
$var1 = n; $status1 = 1;
$var2 = m; $status2 = 0;
$var3 = q; $status3 = 1;
...
$varU = k; $statusU = 1;
необходимо составить запрос в базу данных mySQL в зависимости от того чему равны переменные. Переменные разного типа есть даты есть integer, переменная не участвует в запросе если она равна нулю (либо 0000-00-00, если дата), либо если ее статус=0, у меня пока получается такой код:
$query = "SELECT * from tablename ";
if(($var1 != 0 and $status1 != 0) or ($var2 != 0 and $status2 != 0) or ... or ($varU != 0 and $statusU != 0)) {$query = $query."where ";}
if($var1 != 0 and $status1 != 0) {$query = $query."col1=$var1 ";}
if(($var1 != 0 and $status1 != 0) and ($var2 != 0 and $status2 != 0)) {$query = $query."and ";}
|
ну и так далее проверяя каждую переменную ее статус, и при этом приходится проверять еще и остальные переменные чтобы узнать будет ли продолжение запроса писать ли "and", можно ли этот запрос сформировать более легким способом, пока переменных всего 9, но возможно будет больше. | |
|
|
|
|
|
|
|
для: Poul
(22.11.2007 в 12:02)
| | вот такой тестовый пример, как вариант - в нём можно поиграться с логикой для написания нужных запросов
для удобства - работал с асоциированным массивом:
<?
$query = "SELECT * FROM table WHERE";
$arr = array("test1" => "1", "test2" => "2", "test3" => "", "testN" => "N", "testM" => "0");
$i = 0;
foreach($arr as $key => $val) {
$i++;
if(!empty($val)) {
$query .= " ".$key."=".$val;
if($i + 1 < count($arr))
$query .= " AND ";
}
}
echo $query;
?>
|
| |
|
|
|
|
|
|
|
для: retsoul
(22.11.2007 в 22:42)
| | Спасибо. Написал, правда немножко усложнить пришлось, потому как переменные вообще могут отсутствовать некоторые, и пришлось делать проверку на их наличие, получилось два цикла и три массива, но в целом мысль пришла исходя из этого.
Одно только замечу
$query = "SELECT * FROM table WHERE";
|
лучше писать
$query = "SELECT * FROM table";
|
а WHERE дописывать при проверке, что хотя бы одна переменная будет участвовать в запросе... ну это так, просто если кому интересен будет этот вопрос. | |
|
|
|