Форумы портала PHP.SU » » Работа с СУБД » Помогите написать универсальный sql запрос

Страниц (1): [1]
 

1. jonston - 30 Мая, 2011 - 12:50:08 - перейти к сообщению
Есть массив $_POST;
он может быть как и пустым так и иметь 4 элемента:
1. $_POST['data'];
2. $_POST['sum'];
3. $_POST['function'];
4. $_POST['class'];

скажите как мне написать универсальный sql запрос чтобы если:
1. Массив пуст, то выбираем все уникальные элементы;
2. Если значение какого либо элемента = 1, то условие WHERE для этого элемента игнорируется;

То есть допустим массив $_POST у нас такой:
$_POST['data'] = '31 май 2011';
$_POST['sum'] = '100';

Нужно получить такой sql:
PHP:
скопировать код в буфер обмена
  1.  
  2. $sql = "SELECT DISTINCT * WHERE date = '".$_POST['date']."' AND sum = '".$_POST['sum']."'";
  3.  


а если $_POST например будет состоять из 4 элементов:

$_POST['data'] = '31 май 2011';
$_POST['sum'] = '100';
$_POST['function'] = 'плата за электричество';
$_POST['class'] = '3';

то sql запрос будет иметь такой вид:
PHP:
скопировать код в буфер обмена
  1.  
  2. $sql = "SELECT DISTINCT * WHERE date = '".$_POST['date']."' AND sum = '".$_POST['sum']."' AND function = '".$_POST['function']."' AND class = '".$_POST['class']."'";
  3.  


а если $_POST:

$_POST['data'] = '1';
$_POST['sum'] = '300';
$_POST['function'] = '1';
$_POST['class'] = '1';

то sql:
PHP:
скопировать код в буфер обмена
  1.  
  2. $sql = "SELECT DISTINCT * WHERE sum = '".$_POST['sum']."'";
  3.  


Всем спасибо!
2. EuGen - 30 Мая, 2011 - 12:59:44 - перейти к сообщению
У Вас ошибка - не указана таблица, откуда нужно сделать выборку. В примере ниже это указано как `table`
PHP:
скопировать код в буфер обмена
  1.  
  2. $rgWheres=array();
  3. if(isset($_POST['date']))
  4. {
  5.    $rgWheres[]='`date`="'.mysql_real_escape_string($_POST['date']).'"';
  6. }
  7. if(isset($_POST['sum']))
  8. {
  9.    $rgWheres[]='`sum`='.(int)($_POST['sum']);
  10. }
  11. if(isset($_POST['function']))
  12. {
  13.    $rgWheres[]='`function`="'.mysql_real_escape_string($_POST['function']).'"';
  14. }
  15. if(isset($_POST['class']))
  16. {
  17.    $rgWheres[]='`class`="'.mysql_real_escape_string($_POST['class']).'"';
  18. }
  19. $strWhere=join(' && ', $rgWheres);
  20. if($strWhere)
  21. {
  22.    $strWhere=' WHERE '.$strWhere;
  23. }
  24. $sql = "SELECT DISTINCT * FROM `table`".$strWhere;
  25.  

И еще совет - не используйте имена или служебные слова MySQL для именования чего-либо, это может привести к неожиданным результатам.
3. jonston - 30 Мая, 2011 - 13:04:48 - перейти к сообщению
EuGen пишет:
И еще совет - не используйте имена или служебные слова MySQL для именования чего-либо, это может привести к неожиданным результатам.


Имеется в виду 'function' и 'class'? хорошо!Но я взял их для примера.Так они у меня называются fClass и fFunction.И извиняюсь что не указал таблицу!
к стати я дополнил вопрос если что.Спасибо за ответ!)
4. EuGen - 30 Мая, 2011 - 13:06:54 - перейти к сообщению
Имеется ввиду DATE и SUM
Для значений-единиц добавьте соответствующую проверку в каждое из условий, и все.
5. jonston - 30 Мая, 2011 - 13:10:01 - перейти к сообщению
Еще раз спасибо!Очень помогло!)

 

Powered by ExBB FM 1.0 RC1