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

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

11.12.2015, 13:05. Показов 1319. Ответов 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,844
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
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка. Рецензия / Мнение Это мой обзор планшета X220 с точки зрения школьника. Недавно я решила попытаться уменьшить свой. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru