Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Нужна помощь в написании запроса
 
 автор: Poul   (22.11.2007 в 12:02)   письмо автору
 
 

Имеется ряд переменных, ну или массив, это неважно, у каждой переменной есть статус, допустим
$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, но возможно будет больше.

   
 
 автор: retsoul   (22.11.2007 в 22:42)   письмо автору
 
   для: 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 count($arr))
      
$query .= " AND ";
    }
  }
echo 
$query;
?>

   
 
 автор: Poul   (23.11.2007 в 09:07)   письмо автору
 
   для: retsoul   (22.11.2007 в 22:42)
 

Спасибо. Написал, правда немножко усложнить пришлось, потому как переменные вообще могут отсутствовать некоторые, и пришлось делать проверку на их наличие, получилось два цикла и три массива, но в целом мысль пришла исходя из этого.
Одно только замечу

$query = "SELECT * FROM table WHERE"; 

лучше писать

$query = "SELECT * FROM table"; 

а WHERE дописывать при проверке, что хотя бы одна переменная будет участвовать в запросе... ну это так, просто если кому интересен будет этот вопрос.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования