Форум программистов, компьютерный форум, киберфорум
PHP: базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
12 / 11 / 8
Регистрация: 30.11.2015
Сообщений: 422

Поиск в базе данных

11.12.2015, 13:05. Показов 1336. Ответов 33
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Имеется таблица tovar
PHP
1
$strSQL = "SELECT * FROM tovar;
В ней имеется колонка названия(nazvanie), каким образом можно призвести поиск, указав да или нет? Так же по отдельным критериям в этой же таблице, цене от и до(price) и стране(country) Колонки в одной таблице.
HTML5
1
2
3
4
5
6
7
8
9
10
<select name="nazvanie" value=" ">
   <option name="yes" value="Yes">+</option>
  <option name="no" value="n/a">-</option>
</select>
<select name="country" value=" ">
   <option name="RU" value="RU">+</option>
  <option name="US" value=US">-</option>
</select>
<input type="text" style="width:50px;" name="to">
<input type="text" style="width:50px;" name="from">
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
11.12.2015, 13:05
Ответы с готовыми решениями:

Поиск по базе данных + постраничный вывод данных
Привет всем! в общем с поиском данных всё нормально! но не работает постраничный вывод ((( не знаю, где не так (! посомтрите пожалуйста,...

Поиск по базе данных
Помогите плиз организовать поиск по базе данных. вот скрипт но почему то не желает работать. &lt;?php $form = 'form.php'; ...

Поиск в базе данных
Приветствую всех. Имею таблицу в ней 5 столбцов: HWID Key Nick Skype Reg Нужно произвести поиск по этим 4 параметрам: HWID Key Nick...

33
 Аватар для crautcher
2450 / 2301 / 597
Регистрация: 27.05.2011
Сообщений: 7,845
11.12.2015, 13:20
Цитата Сообщение от Salvat Посмотреть сообщение
указав да или нет?
PHP
1
if ($_POST['nazvanie'] == 'Yes') {  //ищем
Цитата Сообщение от Salvat Посмотреть сообщение
Так же по отдельным критериям в этой же таблице, цене от и до(price) и стране(country)
Я-бы собрал массив условий, а затем склеил их в запросе
PHP
1
2
3
4
5
6
7
8
9
$conds = array();
if (..) {
  $conds[] = "`field` = '$value'";
}
if (..) {
  $conds[] = "`field` = '$value'";
}
...
$query = "SELECT * FROM tovar where (" . join(" and "  ,  $conds) . ")";
1
12 / 11 / 8
Регистрация: 30.11.2015
Сообщений: 422
12.12.2015, 12:42  [ТС]
Я не очень силен в php, только изучаю, подскажите пожалуйста подробней.
0
471 / 399 / 169
Регистрация: 04.01.2013
Сообщений: 1,675
12.12.2015, 14:42
Цитата Сообщение от Salvat Посмотреть сообщение
HTML5
1
2
3
4
<select name="nazvanie" value=" ">
* *<option name="yes" value="Yes">+</option>
* <option name="no" value="n/a">-</option>
</select>
А можете пояснить функционал этого селекта?
0
12 / 11 / 8
Регистрация: 30.11.2015
Сообщений: 422
12.12.2015, 15:29  [ТС]
Указано ли название или нет.

Добавлено через 19 минут
У селекта имя nazvanie, он содержит оптион с именами yes и no, которым присвоены значения да и n/a
0
471 / 399 / 169
Регистрация: 04.01.2013
Сообщений: 1,675
12.12.2015, 16:02
Эмммм а название само где указывается? или я неверно понял)
0
12 / 11 / 8
Регистрация: 30.11.2015
Сообщений: 422
12.12.2015, 16:45  [ТС]
HTML5
1
2
3
4
<select name="nazvanie" value=" ">
<option name="yes" value="Yes">Название1</option>
<option name="no" value="n/a">Название2</option>
</select>
Добавлено через 9 минут
Так точнее, совсем запутался
HTML5
1
2
3
4
<select name="nazvanie" value=" ">
<option name="yes" value="Yes">Название</option>
<option name="no" value="n/a">Нет названия</option>
</select>
В итоге будет список и так же критерий без названия.
0
471 / 399 / 169
Регистрация: 04.01.2013
Сообщений: 1,675
12.12.2015, 18:33
То есть в списке куча товаров и один пункт без названия?)
0
12 / 11 / 8
Регистрация: 30.11.2015
Сообщений: 422
13.12.2015, 01:44  [ТС]
Все верно=)
0
471 / 399 / 169
Регистрация: 04.01.2013
Сообщений: 1,675
13.12.2015, 02:05
PHP
1
2
3
4
5
<select name="nazvanie" >
   <option value="Tovar1">Tovar1</option>
   <option value="Tovar2">Tovar2</option>
  <option  value="no">-</option>
</select>
А в обработчике

PHP
1
2
3
4
5
6
if(isset($_POST) && $_POST['nazvanie'] !=='no') {
$where= " WHERE `nazvanie` = $_POST['nazvanie']";
}else {
$where = "";
}
$strSQL = "SELECT * FROM tovar $where;
А дальше выполняете запрос (Это сугубо по названию)
1
12 / 11 / 8
Регистрация: 30.11.2015
Сообщений: 422
15.12.2015, 13:59  [ТС]
СлаваВирус, благодарю Вас, работает А если необходимо добавить еще один поиск по селекту и по текстовым полям
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
<select name="nazvanie" >
   <option value="Tovar1">Tovar1</option>
   <option value="Tovar2">Tovar2</option>
  <option  value="no">-</option>
</select>
<select name="country" >
   <option value="Russia">Russia</option>
   <option value="China">China</option>
  <option  value="United States">United States</option>
</select>
<input type="text" name="from">
<input type="text" name="to">
From и to цена от и до, поиск произвожу по базе с помощью BETWEEN, только как все объеденить не знаю. Подскажите, пожалуйста. Поиск по базе должен производиться от и до.
PHP
1
2
3
4
5
6
7
if (!isset($from) || empty($from)){
    $from='(SELECT MIN(price) from `tovar`)';
}  
if (!isset($to) || empty($to)){
    $to='(SELECT MAX(price) from `tovar`)';
}  
$strSQL = "SELECT * FROM `tovar` WHERE `price` BETWEEN {$from} AND {$to}";
И если не затруднит, объясните еще как добавить к примеру еще один input к поиску по базе. Я так понимаю, что можно и другим способом производить поиск по базе данных, не только с помощью BETWEEN.
HTML5
1
<input type="text" name="dop">
0
471 / 399 / 169
Регистрация: 04.01.2013
Сообщений: 1,675
16.12.2015, 15:20
Вопроса про доп поле не понял...Про остальные поля - добавьте в селект country
HTML5
1
<option  value="no">-</option>
И тогда обработчик получится типа такого, Вам кстати выше crautcher, подсказывал
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
if(isset($_POST)) {
$nazvanie = ($_POST['nazvanie'] !== 'no') ? "(`nazvanie` = '$_POST[nazvanie]')" : '';
$country = ($_POST['country'] !== 'no') ? "(`country` = '$_POST[country]')" : '';
 
$to = (trim($_POST['to']) != '') ? $_POST['to'] : '';
$from = (trim($_POST['from']) != '') ? $_POST['from'] : '';
 
if($to!== '' && $from !== '') {
$between = "(`price` BETWEEN $from AND $to)";
}else {
$between = '';
}
$conds = array($nazvanie, $country, $between);
$params = array_diff($conds, array(''));
 
$query = "SELECT * FROM `tovar` WHERE " . implode(" AND "  ,  $params) ;
}
Надо пробовать
1
12 / 11 / 8
Регистрация: 30.11.2015
Сообщений: 422
16.12.2015, 16:39  [ТС]
Доп - это допустим необходимо добавить еще один input, получится примерно так
PHP
1
2
3
4
$dop = (trim($_POST['dop']) != '') ? $_POST['dop'] : '';
 
if($to!== '' && $from !== '' && $dop !== '') {
$between = "(`price` BETWEEN $from AND $to AND $dop)";

Слава, пока не получается искать как вы написали, пробую. А если в $_POST ничего нет, ставлю else
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
if(isset($_POST)) {
$nazvanie = ($_POST['nazvanie'] !== 'no') ? "(`nazvanie` = '$_POST[nazvanie]')" : '';
$country = ($_POST['country'] !== 'no') ? "(`country` = '$_POST[country]')" : '';
 
$to = (trim($_POST['to']) != '') ? $_POST['to'] : '';
$from = (trim($_POST['from']) != '') ? $_POST['from'] : '';
 
if($to!== '' && $from !== '') {
$between = "(`price` BETWEEN $from AND $to)";
}else {
$between = '';
}
$conds = array($nazvanie, $country, $between);
$params = array_diff($conds, array(''));
 
$query = "SELECT * FROM `tovar` WHERE " . implode(" AND "  ,  $params) ;
}elseif(!isset($_POST)) { 
$query = "SELECT * FROM `tovar`;
}
Если ничего не задано нужно чтобы выдавало что есть в базе данных, а вот как выше не выдает.
0
471 / 399 / 169
Регистрация: 04.01.2013
Сообщений: 1,675
16.12.2015, 16:46
Ну все дополнительные поля аналогично тем, что у Вас сделаны. Дополните код вот так
PHP
1
2
$query = "SELECT * FROM `tovar` WHERE " . implode(" AND "  ,  $params) ;
print $query;
И посмотрите правильно ли формируется запрос
0
12 / 11 / 8
Регистрация: 30.11.2015
Сообщений: 422
16.12.2015, 16:53  [ТС]
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
if(isset($_POST)) {
$nazvanie = ($_POST['nazvanie'] !== 'no') ? "(`nazvanie` = '$_POST[nazvanie]')" : '';
$country = ($_POST['country'] !== 'no') ? "(`country` = '$_POST[country]')" : '';
 
$to = (trim($_POST['to']) != '') ? $_POST['to'] : '';
$from = (trim($_POST['from']) != '') ? $_POST['from'] : '';
 
if($to!== '' && $from !== '') {
$between = "(WHERE `price` BETWEEN $from AND $to)";
}else {
$between = '';
}
$conds = array($nazvanie, $country, $between);
$params = array_diff($conds, array(''));
 
$query = "SELECT * FROM `tovar` " . implode(" AND "  ,  $params) ;
}
изменил так, выдавало
SELECT * FROM `tovar` WHERE
Теперь выдает все, если параметры не указаны, а с параметрами нет.

Добавлено через 1 минуту
Теперь выдает просто
SELECT * FROM `tovar`
0
471 / 399 / 169
Регистрация: 04.01.2013
Сообщений: 1,675
16.12.2015, 17:03
Так вы в форме выбирали пункты или как?)Верните как было и добавьте ту строку что я указал. и сюда пришлите то, что выведется на экран
0
12 / 11 / 8
Регистрация: 30.11.2015
Сообщений: 422
16.12.2015, 17:13  [ТС]
Да, конечно же указал=) Возвращает
SELECT * FROM `tovar` WHERE
0
471 / 399 / 169
Регистрация: 04.01.2013
Сообщений: 1,675
16.12.2015, 17:15
Цитата Сообщение от Salvat Посмотреть сообщение
Да, конечно же указал=) Возвращает
Вы форму заполняли то?)
0
12 / 11 / 8
Регистрация: 30.11.2015
Сообщений: 422
16.12.2015, 17:18  [ТС]
Опечатался, сейчас перепроверю все.

Добавлено через 2 минуты
SELECT * FROM `tovar` WHERE (`nazvanie`='') AND (`country` = '') AND (`price` BETWEEN 1 AND 2)
0
471 / 399 / 169
Регистрация: 04.01.2013
Сообщений: 1,675
16.12.2015, 17:30
Покажите еще раз селекты из формы и скажите какие пункты выбирали?)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
16.12.2015, 17:30
Помогаю со студенческими работами здесь

Поиск по базе данных
В базе данных таблица, в которой поля Имя, Фамилия, Дата Рождения, Пол и т.д. Помогите сделать поиск по имени и фамилии сразу, как бы...

Поиск по базе данных
имеется таблица, в ней поля id, author, poluchatel как мне найти в поле author совпадение с $_SESSION ?? Пробовал так: $friend =...

Поиск по базе данных
Народ возникла необходимость поиска по бд,есть вот такой php код,но ничего не находит,я думаю косяк в SQL запрос,помогите если знаете!...

Поиск в базе данных
Добрый вечер! Допустим у меня есть 2 или 3 или 4 (без разницы) таблиц в базе данных... у нас есть параметр (get) url=page и во всех полях...

поиск в базе данных на php
здравствуйте! у меня имеется база данных написанная на php данные беруться из 2ух таблиц mysql. я хотела бы сделать поиск по полю ФИО в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11680&amp;d=1772460536 Одним из. . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru