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 :: Реально ли реализовать поиск в MySQL таблице ? Проблема с неоднородностью данных.

 PHP.SU

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


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

> Описание: Всё для поиска в одной ячейке
Zend
Отправлено: 08 Октября, 2010 - 21:20:57
Post Id


Гость


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


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




Движок DLE, поиск по доп. полям.

Нужно реализовать поиск по таблице, в ячейках которой хранятся данные -

CODE (htmlphp):
скопировать код в буфер обмена
  1. e-mail|mail@mail.ru||age|25||rost|175||ves|70||telephone|555555|

Нужно реализовать поиск, с условиями сравнения. Т.е. искать не просто age=25, а допустим age>20 and rost<180 .
Как реализовать не знаю, ведь все эти данные(рост, вес, возраст) по которым ведется отбор находятся в одной ячейке.
Для наглядности скрин:

(Отредактировано автором: 08 Октября, 2010 - 21:22:30)

 
 Top
garvey
Отправлено: 09 Октября, 2010 - 10:46:07
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 528
Дата рег-ции: Май 2010  
Откуда: Minsk


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




Сделайте эти данные в отдельных полях. Иначе это не соответствует 3-й форме нормализации БД. А так - регулярные выражения. И то, это будет некрасиво, неправильно, трудно.
 
 Top
Zend
Отправлено: 09 Октября, 2010 - 11:16:49
Post Id


Гость


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


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




Это не результат моих записей, до меня так было.
 
 Top
Пит
Отправлено: 09 Октября, 2010 - 12:14:01
Post Id


Новичок


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


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




ну считай строку из БД, разбей ее по разделителю "|" в массив, и вытворяй что хочешь - та же миниБД получится с уникальными полями
 
 Top
HotBird
Отправлено: 09 Октября, 2010 - 12:23:07
Post Id



Гость


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


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




Однозначно лучший вариант это переделать базу и разнести эти данные по разным полям. Но если уж никак нельзя, то нужно тогда в цикле проверять каждую строку что увеличивает время работы скрипта.
PHP:
скопировать код в буфер обмена
  1. $string="e-mail|mail@mail.ru||age|25||rost|175||ves|70||telephone|555555|";
  2. $exploded_line=explode("|",$string);
  3. if ($exploded_line[5] > 20 and $exploded_line[8] < 180)
  4. //далее выполнаете нужные вам действия


-----
Человек, сделавший синтаксический анализатор PHP на одном регулярном выражении, займет достойное место среди гениев.
Качественный хостинг по доступной цене
 
 Top
garvey
Отправлено: 09 Октября, 2010 - 12:28:08
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 528
Дата рег-ции: Май 2010  
Откуда: Minsk


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




HotBird, как можно доверять хостингу, у которого в шапке notice вылазит?
 
 Top
SAD
Отправлено: 09 Октября, 2010 - 12:55:15
Post Id



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


Покинул форум
Сообщений всего: 2508
Дата рег-ции: Май 2009  
Откуда: Днепропетровск, Украина


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





HotBird, а что у вас за ава? Что за человек?

(Отредактировано автором: 09 Октября, 2010 - 13:00:13)

 
 Top
HotBird
Отправлено: 09 Октября, 2010 - 13:02:30
Post Id



Гость


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


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




garvey
1. Вопрос не потеме.
2. Я перехожу по ссылке из подписи и никаких нотисов не вылазит.
3. Не доверяете не пользуйтесь. Я перебрал несколько хостингов и этот оказалса лучшим.

А на счёт вопроса автора темы. Есть другая сердитая идея. Радость Данные по которым производится поиск являются целыми числами и находятся опредилённом диапазоне. Например age имеет диапазон 0-100. Если нам нужно выбрать записи где age>20 то можно сделать так:
PHP:
скопировать код в буфер обмена
  1. $query_text="SELECT * FROM table_name WHERE xfields LIKE '%age|21%'";
  2. for ($i=22;$i<=100;$i++) {
  3. $query_text.=" AND xfields LIKE '%age|".$i."%'";
  4. }
  5. mysql_query($query_text);

(Добавление)
SAD пишет:
HotBird, а что у вас за ава? Что за человек?

Пауло Коэльо.


-----
Человек, сделавший синтаксический анализатор PHP на одном регулярном выражении, займет достойное место среди гениев.
Качественный хостинг по доступной цене
 
 Top
JustUserR
Отправлено: 09 Октября, 2010 - 21:53:31
Post Id



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


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


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




Zend Приведенная вами структура таблицы БД подразумевает использование дополнительных функций для определение выборки по некоторому критерию - при этом наиболее эффективным методом является создание процедур на сервере БД в виде PL/SQL - или использовать встроенные функции при возможности сконструировать статический целевой запрос со сравнение по alias-имени - такой подход использует прямое обращение к представлению инфомационных полей и выполняется значительно эффективнее по сравнению с копирование данных на сервер приложений


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB