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 :: Каким должен быть запрос?

 PHP.SU

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


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

> Без описания
skk
Отправлено: 04 Августа, 2013 - 21:57:13
Post Id


Новичок


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


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




Имеется форма, указанная на рисунке.
Таких вот полей может быть от 10 до 45.

Что делает эта форма:
Она выбирает заданное кол-во сообщений из БД.
Проблема в том, что я не знаю каким должен быть запрос, чтобы удовлетворить все возможные события.
Допустим, все, кроме одного поля могут иметь значение 0, а это поле любое.
Допустим, из 32 полей, только 7 имеют значения > 0.
Допустим все имеют значение 1.

Каким должен быть запрос, чтобы делалась эта самая выборка с этими условиями?
Если какие-то поля пустые или значение 0, то по нему не должна идти выборка.
Прикреплено изображение (Нажмите для увеличения)
5.JPG
 
 Top
Panoptik
Отправлено: 04 Августа, 2013 - 22:00:29
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2493
Дата рег-ции: Нояб. 2011  
Откуда: Одесса, Украина


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




PHP:
скопировать код в буфер обмена
  1.  
  2. $sql = 'SELECT * FROM `table_name` WHERE 1';
  3. foreach($fields as $field => $value) {
  4.   if($value) {
  5.     $sql .= ' AND `'.$field.'` = "'.$value.'"';
  6.   }
  7. }
  8. echo $sql;
  9.  

(Добавление)
но нужно обязательно все поля проверять и очищать от инъекций!

(Отредактировано автором: 04 Августа, 2013 - 22:01:25)



-----
Just do it
 
 Top
skk
Отправлено: 05 Августа, 2013 - 09:59:19
Post Id


Новичок


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


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




Спасибо, вот я получил несколько полей. А как быть с количеством записей? Использовать limit? Если да, то как это все в одну запись уместить?
(Добавление)
Или лучше использовать joinы? ( unionы?)
 
 Top
nkl
Отправлено: 05 Августа, 2013 - 10:36:21
Post Id



Посетитель


Покинул форум
Сообщений всего: 305
Дата рег-ции: Янв. 2012  


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




Цитата:
SELECT * FROM `table_name` WHERE 1

Это че за запрос такой?
 
 Top
skk
Отправлено: 05 Августа, 2013 - 11:21:59
Post Id


Новичок


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


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




nkl пишет:
Цитата:
SELECT * FROM `table_name` WHERE 1

Это че за запрос такой?


Видимо, это как пример. Мне хватило =)
Вопрос актуален про join'ы union'ы
 
 Top
imya
Отправлено: 05 Августа, 2013 - 21:06:50
Post Id



Участник


Покинул форум
Сообщений всего: 1472
Дата рег-ции: Сент. 2012  
Откуда: Запорожье, Украина


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




А при чём тут join и кол-во записей?


-----
PHP:
скопировать код в буфер обмена
  1. do {box != cat;} while (cat != box);


Когда нормальный человек, уезжая из дома одевает на жену пояс верности, веб-дизайнер ставит на нее счетчик...
 
My status
 Top
darl
Отправлено: 05 Августа, 2013 - 21:15:16
Post Id


Новичок


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


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




Я до конца не понял, что Вам нужно конкретно. Поставьте конкретную задачу без допустим. По идеи этот запрос можно осуществить на mysql без вмешательства php
 
 Top
esterio
Отправлено: 06 Августа, 2013 - 10:40:59
Post Id



Активный участник


Покинул форум
Сообщений всего: 5025
Дата рег-ции: Нояб. 2012  
Откуда: Украина, Львов


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




как вариант
PHP:
скопировать код в буфер обмена
  1. $fields = implode(' AND ', array_map('sprintf', array_fill(0, count($fields), '%s="%s"'), array_keys($fields), array_map('mysql_real_escape_string', array_values($fields))));


П.С. как-то делал замеры скорости. Такой вариант оказалася быстрее обычного foreach

(Отредактировано автором: 06 Августа, 2013 - 10:47:44)

 
 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