Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: поиск в бд sql
 
 автор: lightning.say   (19.11.2010 в 18:56)   письмо автору
 
 

Здравствуйте уважаемые программисты, нужен ваш совет...
допустим есть бд

contacts  CREATE TABLE `contacts` (                                 
            `id_contact` int(11) NOT NULL auto_increment,           
            `name` varchar(30) NOT NULL,                            
            `client` tinytext NOT NULL,                             
            `street` tinytext NOT NULL,             
            `email` tinytext NOT NULL,                          
            `Phone` tinytext NOT NULL,                                          
            `pos` smallint(3) NOT NULL default '0',                 
            `hide` enum('show','hide') NOT NULL default 'show',     
            `id_catalog` int(8) NOT NULL default '0',               
            PRIMARY KEY  (`id_contact`)                             
          ) ENGINE=MyISAM AUTO_INCREMENT=83 DEFAULT CHARSET=cp1251  

как бы корректно организовать поиск в такой бд?
чтобы допустим вводишь имя клиента или улицу или другое значение или несколько значений и чтобы строилась таблица удовлетворяющая этим условиям...

  Ответить  
 
 автор: Лена   (20.11.2010 в 01:00)   письмо автору
 
   для: lightning.say   (19.11.2010 в 18:56)
 

Можно так сделать.
Пользователь ввел в форму несколько слов.
1. Разбить строку по пробелу и дальше работать с каждым словом.
2. Проверяем через регулярные выражения, есть ли в слове @, есть - перед нами email, значит, запрос будет типа SELECT * FROM contacts WHERE email LIKE '%asd@com.ua%'
3. Дальше проверяем, состоит ли слово только из цифр, (),- - проверяем на те символы, которые могут встречаться в телефоне, поиск проводится в поле, где хранятся телефоны.
4. Если у нас буквы, цифры, другие символы - значит пользователь ввел name,client или street, ищем по этим полям. Если на полях поставить полнотекстовый поиск, запрос будет: WHERE MATCH ... AGAINST.

Честно скажу, чего-то мне кажется, что мой вариант не очень... Лучше бы вы под полем формы сделали типа подсказку-шаблон для пользователя:

"Если вы хотите найти пользователя в нашей базе, впишите данные в таком порядке:
Иванов Иван Петрович 123-123-123 asd@asd.ua"
Но все равно найдутся такие, которые заполнят, как им нравится :)

  Ответить  
 
 автор: lightning.say   (20.11.2010 в 03:33)   письмо автору
 
   для: Лена   (20.11.2010 в 01:00)
 

а если несколько полей ввода сделать одно для имени, одно для телефона и т.д.??

  Ответить  
 
 автор: Лена   (21.11.2010 в 00:34)   письмо автору
 
   для: lightning.say   (20.11.2010 в 03:33)
 

Если несколько, тогда после отправки формы на сервер нужно проверять, какие поля заполнены.
Если поле заполнено, мы "долепливаем" к основному запросу кусочек, который отвечает за поиск значения в определенном поле.
Смотрите.
Запрос будет выглядеть так(при условии,если хотя бы одно поле формы заполнено):

SELECT * FROM contacts WHERE $searh;

$searh - условие, которое учитывает все заполненные поля и будет производить по ним поиск.


<?php
//если заполнено имя
if(!empty($_POST['name']))
    
$where[] = "name LIKE '%" mysql_real_escape_string($_POST['name']) . "%'";

//если заполнен телефон
if(!empty($_POST['phone']))
    
$where[] = "phone LIKE '%" mysql_real_escape_string($_POST['phone']) . "%'";

//склеиваем условие запроса
$search implode(" AND ",$where);

SELECT FROM contacts WHERE $searh;
?>

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования