Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> PHP+MySQL. Поиск по базе..., Нужна идея.
Mick Thunder
сообщение 9.03.2007 - 23:59

Crocodile Dundee
*******
20 лет с форумомкубок за победу в конкурсах Форумаорден II степениНовогодний конкурс
Группа: Модератор
Сообщений: 17947
Регистрация: 5.09.2004
Пользователь №: 4597


Написал базу заказов для работы. Вкрячил поиск по номеру заказа. При абсолютном совпадении выводится строка из базы. Тут все просто. Примерно так:
Код
function search($page)
{
$numorder2 = $_GET["numorder1"];
$res2 = db_query_ex("SELECT * FROM orders WHERE numorder = '$numorder2'");
while($row1 = mysql_fetch_array($res2)) {
$id = $row1["id"];
$datetime = $row1['datetime'];
.....
echo '<td align=center width=24>'.$id.'</td>';
echo '<td width=50><span style="font-size:8px"><b>'.$datetime.'</b></span></td>
....
}


Задача: можно ли сделать по-простому выборку не при абсолютном совпадении, а при пересечении цифр поиска с номерами заказов.
Т.е. если в запросе написать "12" то выборка произойдет из заказов с номерами "123456", "123457", "345412".
Т.е. нужно использовать поиск как шаблон. Чую, что решение не простое, если у SELECT WHERE нет каких-то конструкций о которых я не знаю (Вообще, я много чего не знаю)..

P.S. Эта база мой первый серьезный проект на пхп =)))..

Сообщение отредактировано Mick Thunder - 10.03.2007 - 00:00
Перейти в начало страницы
 
+Цитировать сообщение
srv
сообщение 10.03.2007 - 00:15
Частый гость
***

Группа: Участник
Сообщений: 192
Регистрация: 30.10.2005
Пользователь №: 10364


Цитата(Mick Thunder @ 9.03.2007 - 23:59) *
Написал базу заказов для работы. Вкрячил поиск по номеру заказа. При абсолютном совпадении выводится строка из базы. Тут все просто. Примерно так:
Код
function search($page)
{
$numorder2 = $_GET["numorder1"];
$res2 = db_query_ex("SELECT * FROM orders WHERE numorder = '$numorder2'");
while($row1 = mysql_fetch_array($res2)) {
$id = $row1["id"];
$datetime = $row1['datetime'];
.....
echo '<td align=center width=24>'.$id.'</td>';
echo '<td width=50><span style="font-size:8px"><b>'.$datetime.'</b></span></td>
....
}

Задача: можно ли сделать по-простому выборку не при абсолютном совпадении, а при пересечении цифр поиска с номерами заказов.
Т.е. если в запросе написать "12" то выборка произойдет из заказов с номерами "123456", "123457", "345412".
Т.е. нужно использовать поиск как шаблон. Чую, что решение не простое, если у SELECT WHERE нет каких-то конструкций о которых я не знаю (Вообще, я много чего не знаю)..

P.S. Эта база мой первый серьезный проект на пхп =)))..


like тебе в помощь smile.gif



если у тебя номер заказа хранится в поле типа char/varchar
db_query_ex("SELECT * FROM orders WHERE numorder like '%".$numorder2."%'");

если у тебя номер заказа хранится в поле типа numeric сделай преобразование типа cast,convert (зависит от версии) или тривиально:
db_query_ex("SELECT * FROM orders WHERE ltrim(' '+numorder ) like '%".$numorder2."%'");


и еще:

$numorder2 = $_GET["numorder1"];

доверяй, но проверяй smile.gif
хотя бы так
$numorder2 =(int) $_GET["numorder1"];

Сообщение отредактировано srv - 10.03.2007 - 00:19
Перейти в начало страницы
 
+Цитировать сообщение
Mick Thunder
сообщение 10.03.2007 - 00:24

Crocodile Dundee
*******
20 лет с форумомкубок за победу в конкурсах Форумаорден II степениНовогодний конкурс
Группа: Модератор
Сообщений: 17947
Регистрация: 5.09.2004
Пользователь №: 4597


Цитата(srv @ 10.03.2007 - 00:15) *
like тебе в помощь smile.gif
db_query_ex("SELECT * FROM orders WHERE ltrim(' '+numorder ) like '%".$numorder2."%'");

Спасибо за лайк, ща попробую..
Пхп никогда не учил, изучаю его расковыривая чужие коды, нарываюсь на кучу банальных грабель, но ничего, прорвемся )). Поэтому и операторов не знаю, если нужно немного в сторону копнуть.
Перейти в начало страницы
 
+Цитировать сообщение
srv
сообщение 10.03.2007 - 00:27
Частый гость
***

Группа: Участник
Сообщений: 192
Регистрация: 30.10.2005
Пользователь №: 10364


Цитата(Mick Thunder @ 10.03.2007 - 00:24) *
Спасибо за лайк, ща попробую..
Пхп никогда не учил, изучаю его расковыривая чужие коды, нарываюсь на кучу банальных грабель, но ничего, прорвемся )). Поэтому и операторов не знаю, если нужно немного в сторону копнуть.


это не пхпsmile.gif - это SQL smile.gif - может тебе ман дать по мускулю? (правда некачественный, но сойдет)
пиши в личку, еслки грабли будут слишком часто докучать.

Удачи.

Сообщение отредактировано srv - 10.03.2007 - 00:36
Перейти в начало страницы
 
+Цитировать сообщение
Mick Thunder
сообщение 10.03.2007 - 01:03

Crocodile Dundee
*******
20 лет с форумомкубок за победу в конкурсах Форумаорден II степениНовогодний конкурс
Группа: Модератор
Сообщений: 17947
Регистрация: 5.09.2004
Пользователь №: 4597


Цитата(srv @ 10.03.2007 - 00:27) *
это не пхпsmile.gif - это SQL smile.gif
Спасибо, работает выборка. Ура =)))))

Цитата(srv @ 10.03.2007 - 00:27) *
пиши в личку, еслки грабли будут слишком часто докучать.
Всенепременно, спасибо.

Выборка по "63":
Перейти в начало страницы
 
+Цитировать сообщение
Mick Thunder
сообщение 18.10.2007 - 21:15

Crocodile Dundee
*******
20 лет с форумомкубок за победу в конкурсах Форумаорден II степениНовогодний конкурс
Группа: Модератор
Сообщений: 17947
Регистрация: 5.09.2004
Пользователь №: 4597


Господа, помогите еще...

Захотелось получить статистику по базе. Простенькую написал, но хочется автоматизировать до конца.
Подскажите вот в чем. Может есть изящное решение (пхп и мускул не учил, поэтому тонкостей не знаю).
В базе есть столбец с именами сотрудников. Естественно, у каждого заказа есть свой владелец-сотрудник.

Как просто получить массив со всеми сотрудниками, мелькающими во всех заказах? Естественно, чтобы никто не повторялся там =).

Можно через вложенный while со сравнением по результатам поиска, если не повторяется сотрудник, присваивать новый элемент массива. Но, некрасиво как-то.
Пока ограничился забитием массива вручную и потом по каждому элементу массива получаю нужные данные из базы.
Код
$Worker['0']='Вася';
$Worker['1']='Петя';
$Worker['2']='Фёкла';
$Worker['3']='Прасковья';

$x = 0;
while($x <= 3) {
$res2 = db_query_ex("SELECT quantity FROM orders WHERE owner = '$Worker[$x]'");
...
Выручайте wink.gif ...
Перейти в начало страницы
 
+Цитировать сообщение
сплю
сообщение 18.10.2007 - 21:36
Звезда форума
******
орден III степени
Группа: Участник
Сообщений: 1510
Регистрация: 29.09.2003
Пользователь №: 92


SELECT COUNT(*), w.name FROM orders as o, workers as w WHERE w.id = o.owner GROUP BY w.name;

или без COUNT(*) если не надо считать количество заказов на сотруднега.

или вообще SELECT DISTINCT o.owner FROM orders as o;

Сообщение отредактировано сплю - 18.10.2007 - 21:39
Перейти в начало страницы
 
+Цитировать сообщение
Mick Thunder
сообщение 19.10.2007 - 01:20

Crocodile Dundee
*******
20 лет с форумомкубок за победу в конкурсах Форумаорден II степениНовогодний конкурс
Группа: Модератор
Сообщений: 17947
Регистрация: 5.09.2004
Пользователь №: 4597


Спасибо, сделал на основе DISTINCT, хотя его не рекомендуют юзать, ввиду неоптимизированности.

Честно говоря в первой строке ничего не понял, для чего используются конструкции типа w.name и как их дальше использовать. Чайник я. Надо туториалы читать =).
Перейти в начало страницы
 
+Цитировать сообщение

Ответить в данную темуНачать новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



RSS Текстовая версия Сейчас: 6.07.2025 - 09:17