Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.65/51: Рейтинг темы: голосов - 51, средняя оценка - 4.65
5 / 5 / 2
Регистрация: 09.07.2010
Сообщений: 139

выборка из MySQL

13.05.2011, 16:57. Показов 10372. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
добрый день.
столкнулся с таким траблом
нужно сделать выборку из БД по неопределенному количеству значений
предположим в таблице есть 10 колонок , а пользователь хочет сделать выборку по 3 5 и 8 колонке

если он не вносит значения в текст боксы в php переменная не инициализируется

подскажите плз как нужно написать запрос для MySQL
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
13.05.2011, 16:57
Ответы с готовыми решениями:

Выборка из БД mysql по дате
есть код datetime - столбец в БД с датой в формате (0000-00-00 00:00:00) $date - дата и время получаемый пост запросом в формате...

Выборка данных с Mysql
Подскажите пожалуйста, нужно чтоб при вводе двух дат в инпути, например в один 2014, а в другой 2015 и при нажатие на кнопку выводился...

Выборка из таблицы MySQL
Помогите правильно составить запрос. Есть таблица "Меню". В ней есть несколько полей,а именно name,type,cost. В поле type есть значения...

11
130 / 117 / 30
Регистрация: 14.11.2010
Сообщений: 707
13.05.2011, 17:00
зная имена столбцов, делаешь такой запрос:
PHP
1
$resultat = mysql_query("SELECT `field3`, `field5`, `field8` FROM `table_name`");
1
5 / 5 / 2
Регистрация: 09.07.2010
Сообщений: 139
13.05.2011, 17:06  [ТС]
сор не правильно выразился, мы не знаем по каким значениям будет сделана выборка,1 человек захотел по 1 3 и 5 колонке другой по 2 5 и 7 колонке как составить такой запрос
0
130 / 117 / 30
Регистрация: 14.11.2010
Сообщений: 707
13.05.2011, 17:18
ну вот если у тебя 10 столбцов, чтобы человек сделал выборку ты ставишь чекбоксы, я так понимаю?
ты соотнеси между собой чекбоксы и названия полей, т.е. ставь условия, если первый чекбокс выбран то выводи первый столбец, потом проверяешь выбран ли второй, если да, то выводишь воторое и т.д.
0
5 / 5 / 2
Регистрация: 09.07.2010
Сообщений: 139
14.05.2011, 11:11  [ТС]
начну с начала. У нас есть таблица

+----+------+---------+--------+--------+
id имя фамилия пол возраст
+----+------+---------+--------+--------+
1 Петя петров м 19
+----+------+---------+--------+--------+
2 Саша Сидорова ж 21
+----+------+---------+--------+--------+
3 Вася Кузнецов м 18
+----+------+---------+--------+--------+
4 Аня метлушко ж 25

у нас есть форма поиска с такими полями
поиск по
1. id
2 имени
3 фамилии
4 полу
5.1 возрасту от
5.2 до
при помощи чек боксов пользователь определяет по каким критериям он будет искать
выбрав нужные и внеся данные мы должно получить
те сроки из таблицы которые соответствуют данному запросу т.е если поиск идёт по 3 критериям отображается вся информация по объекту

у меня вопрос как сформировать SQL если мы не знаем точное количество параметров по которым мы ищем

т.е если бы знали точное количество количество параметров поиска мы бы написали

SQL
1
"SELECT * FROM name_table WHERE id='$id' AND имя='$имя' AND фамилия='$фамилия' ... и т.д "
но мы не знаем количество этих параметров

SQL
1
id='$id' AND имя='$имя' AND фамилия='$фамилия' ... и т.д
в одном случае нам нужен будет запрос
SQL
1
"SELECT * FROM name_table WHERE id='$id' AND имя='$имя' "
а в другом

SQL
1
"SELECT * FROM name_table WHERE id='$id' AND фамилия='$фамилия' "
как решить этот вопрос ?
0
 Аватар для Nazz
898 / 729 / 80
Регистрация: 12.03.2009
Сообщений: 2,804
Записей в блоге: 2
14.05.2011, 11:24
очень просто. делаете так:

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
$query = "select * from `table_name` where";
if($_POST['checkbox1'] == 1)
{
   //здесь нужно проверить $query есть ли там уже значение послк where, естли есть то
   $query .= " and `field1`='".$_POST['field1']."'";
   //естли нет то
   $query .= " `field1`='".$_POST['field1']."'";
}
if($_POST['checkbox2'] == 1)
{
   //здесь нужно проверить $query есть ли там уже значение послк where, естли есть то
   $query .= " and `field2`='".$_POST['field2']."'";
   //естли нет то
   $query .= " `field2`='".$_POST['field2']."'";
}
 
$oResult = mysql_query($query);
ето самый простой способ который пришёл в голову... ето можно минимизировать, естли хорошо обдумать))
1
21 / 21 / 3
Регистрация: 05.05.2011
Сообщений: 62
14.05.2011, 12:39
При поиске я обычно считаю, что если пользователь не ввел значение в поле поиска, то поиск по этому полю ему не нужен. Собирать же условие поиска удобнее в массив
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
$o=array();
if(isset($_POST['field1']) and $_POST['field1']!='')
{
     //если текстовое поле, то нужно использовать mysql_escape_string
     $v=mysql_escape_string($_POST['field1']);
     $o[]="field1='$v'";
}
if(isset($_POST['field2']) and $_POST['field2']!='')
{
     //если текстовое поле, то нужно использовать mysql_escape_string
     $v=mysql_escape_string($_POST['field2']);
     $o[]="field2='$v'";
}
if(isset($_POST['field3']) and $_POST['field3']!='')
{     
     $v=$_POST['field3'];
     $o[]="field3='$v'";
}
 
if(isset($_POST['field4']) and $_POST['field4']!='')
{     
     $v=$_POST['field4'];//field4 -пусть возраст от
     $o[]="field4>='$v'";
}
if(isset($_POST['field5']) and $_POST['field5']!='')
{     
     $v=$_POST['field5'];//field5 -пусть возраст до
     $o[]="field5<='$v'";
}
if(sizeof($o)>0)
{
    $condition='where '. implode(' and ',$o);
}
else
{
     $condition='';
}
$q="select * from table_name $condition";
0
5 / 5 / 2
Регистрация: 09.07.2010
Сообщений: 139
14.05.2011, 14:18  [ТС]
можно вопрос почему с массивом проще?

Добавлено через 17 минут
в принципе понял суть, спасибо

Добавлено через 7 минут
ещё один небольшой вопрос, возмём например поле фамилия предположим что мы не знаем как она точно пишется и в поле для поиска набираем какую то часть, как сделать выборку на SQL
0
 Аватар для Nazz
898 / 729 / 80
Регистрация: 12.03.2009
Сообщений: 2,804
Записей в блоге: 2
14.05.2011, 14:50
PHP
1
".....`fam` LIKE '%".$fam."%'....."
$fam - часть фамилии
1
21 / 21 / 3
Регистрация: 05.05.2011
Сообщений: 62
14.05.2011, 14:55
для этого есть оператор сравнения like. Например, мы точно знаем , что фамилия заканчивается на "ова". Тогда условие будет
lastname like '%ова'
Или мы знаем, что фамилия начинается на "Ива". Тогда условие будет таким
lastname like 'Ива%'

Или мы знаем, что в фамилии есть сочетание "кл". Условие соответственно будет
lastname like '%кл%'
Везде знак процента означает любое количество символов. Обычно я проверяю на наличие в поле введенной комбинации букв, т.е like '%введенная комбинация букв для поиска%'

Вообще почитай про like и какие спец.символы можно еще использовать
0
5 / 5 / 2
Регистрация: 09.07.2010
Сообщений: 139
14.05.2011, 15:06  [ТС]
спасиб
0
0 / 0 / 0
Регистрация: 15.07.2015
Сообщений: 138
21.07.2015, 08:49
Здравствуйте эта таблица сортирует данные и нужно чтобы выбирала пользователей лишь по выбранному возрасту,вот так я создал саму таблицу
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<th width='50'><a href=\"word5.php?key=Fam&sort=$sort\">Fam</a></th>
<th width='50'><a href=\"word5.php?key=Name&sort=$sort\">Name</a></th>
<th width='50'><a href=\"word5.php?key=Otch&sort=$sort\">Otch</a></th>
<th width='50'><a href=\"word5.php?key=age&sort=$sort\">age</a></th>
<th width='50'><a href=\"word5.php?key=cvet&sort=$sort\">cvet</a></th>
</th></tr>";
 
ячейку age я изменил вот так
 
<th width='160'><a href=\"word5.php?key=age&sort=$sort \">age</a>От<label><input name= age type= text size=1/></label>
До<label><input name= age type= text size = 1 /></label></th>
под всей таблицей прописал обработку этой ячейки таким образом
 
$age =($_POST["age"]);
echo $age;
if ($age >= 18 && $age < 30) {
//
} elseif($age >= 30 && $age < 45) {
//
} else {
//
}
и создал запрос
PHP
1
$result = mysql_query("SELECT * FROM users WHERE `age` > 10 AND `age` < 100");
сортировка осталась сортирует нормально а отбор не происходит,поля для ввода есть а нужного результата отбора по выбранному возрасту не как нет,вот сама таблица http://dizarius.com/arta/word5.php
Просмотрите пожалуйста весь код возможно что-то нужно переделать,подскажите пожалуйста...
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
<?php 
$con = mysql_connect("localhost","......... ","........ ");
if (!$con)
   {
   die('Could not connect: ' . mysql_error());
   }
mysql_select_db("........", $con);
$sql = mysql_query("SET CHARACTER SET cp1251_koi8");
$result = mysql_query("SELECT * FROM users WHERE `age` > 10 AND `age` < 100");
mysql_query($order);
echo $myrow_comcont['title'];
echo $myrow_comcont['com'];
echo "<table border='1'>";
 
$key_array = array('Fam','Name','Otch','age','cvet');
$sort_array = array('asc','desc');
 
if (isset($_GET['key']))
{
    $key=$_GET['key'];
    $sort=$_GET['sort'];
}
else
{
    $key='Fam';
    $sort='desc';
}
 
if(in_array($key, $key_array) && in_array($sort, $sort_array))
{
    $query = "SELECT * FROM users ORDER BY $key $sort";     
    $result = mysql_query($query);
}
else exit("неверный формат запроса!");  
 
if($sort=='asc')
{
   $sort='desc';
   $vid_sort=$sort_up;
}
else
{
   $sort='asc';
   $vid_sort=$sort_down;   
}
 
print "<table border = 1>";
print "<tr>
<th width='50'><a href=\"word5.php?key=Fam&sort=$sort\">Fam</a></th>
<th width='50'><a href=\"word5.php?key=Name&sort=$sort\">Name</a></th>
<th width='50'><a href=\"word5.php?key=Otch&sort=$sort\">Otch</a></th>
<th width='160'><a href=\"word5.php?key=age&sort=$sort \">age</a>От<label><input name= age type= text  size = 1 /></label>
До<label><input name= age type= text  size = 1 /></label></th>
<th width='50'><a href=\"word5.php?key=cvet&sort=$sort\">cvet</a></th>
</th></tr>";
// Отформатировать и вывести каждую строку таблицы
while ($row = mysql_fetch_array($result))
{
    print "<tr>";
    print '<td>'.$row['Fam'].'</td><td>'.$row['Name'].'</td><td>'.$row['Otch'].'</td><td>'.$row['age'].'</td><td>'.substr($row['cvet'],0,30).'</td></td>';
    $age =($_POST["age"]);
echo $age;
if ($age >= 18 && $age < 30) {
     // 
} elseif($age >= 30 && $age < 45) {
     //
} else {
    // 
}
    print "</tr>";
}
// Завершить таблицу
print "</table>";
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
21.07.2015, 08:49
Помогаю со студенческими работами здесь

Выборка из БД MySQL
Здравствуйте ув. форумчане. Только сегодня начал учить перл и сразу возник вопрос. Хочу вывести данные из мускула: #!/usr/bin/perl ...

Выборка с MySQL
нужно вывести в рейтинг пользователей по рейтингу все это не сложно только проблема, я не знаю как сделать такой вывод для конкретного...

Mysql выборка
Доброе время суток! Прошу помочь с выборкой. Уже всю голову сломал. У меня таблицы: teams (id_teams, team, id_leagues, url) games...

выборка из бд mysql
ПОМОГИТЕ ПОЖАЛУЙСТА, НЕ МОГУ РАЗОБРАТЬСЯ. ЕСТЬ ВОТ ТАКАЯ ФОРМА &lt;FORM action=index1.php10 method=post&gt; ...

Выборка в mysql
Не могу решить два вопроса по sql запросам 1. Нужно сделать выборку из таблицы! Нужно такой запрос который мне выберет записи которых...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru