Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Помогите написать универсальный sql запрос

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Без описания
jonston
Отправлено: 30 Мая, 2011 - 12:50:08
Post Id



Посетитель


Покинул форум
Сообщений всего: 455
Дата рег-ции: Март 2011  


Помог: 3 раз(а)




Есть массив $_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.  


Всем спасибо!

(Отредактировано автором: 30 Мая, 2011 - 12:56:01)



-----
$i = 0;
$i = $i++ + ++$i; ?
 
 Top
EuGen Администратор
Отправлено: 30 Мая, 2011 - 12:59:44
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




У Вас ошибка - не указана таблица, откуда нужно сделать выборку. В примере ниже это указано как `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 для именования чего-либо, это может привести к неожиданным результатам.


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
jonston
Отправлено: 30 Мая, 2011 - 13:04:48
Post Id



Посетитель


Покинул форум
Сообщений всего: 455
Дата рег-ции: Март 2011  


Помог: 3 раз(а)




EuGen пишет:
И еще совет - не используйте имена или служебные слова MySQL для именования чего-либо, это может привести к неожиданным результатам.


Имеется в виду 'function' и 'class'? хорошо!Но я взял их для примера.Так они у меня называются fClass и fFunction.И извиняюсь что не указал таблицу!
к стати я дополнил вопрос если что.Спасибо за ответ!)


-----
$i = 0;
$i = $i++ + ++$i; ?
 
 Top
EuGen Администратор
Отправлено: 30 Мая, 2011 - 13:06:54
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




Имеется ввиду DATE и SUM
Для значений-единиц добавьте соответствующую проверку в каждое из условий, и все.


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
jonston
Отправлено: 30 Мая, 2011 - 13:10:01
Post Id



Посетитель


Покинул форум
Сообщений всего: 455
Дата рег-ции: Март 2011  


Помог: 3 раз(а)




Еще раз спасибо!Очень помогло!)

(Отредактировано автором: 30 Мая, 2011 - 18:39:29)



-----
$i = 0;
$i = $i++ + ++$i; ?
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Работа с СУБД »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB