Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Архив Flasher.ru > Программирование > PHP

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему  
Старый 22.06.2004, 02:00
igor82 вне форума Посмотреть профиль Отправить личное сообщение для igor82 Найти все сообщения от igor82
  № 1  
igor82

Регистрация: Apr 2002
Адрес: Россия, Воронеж
Сообщений: 121
Отправить сообщение для igor82 с помощью ICQ Отправить сообщение для igor82 с помощью Yahoo
По умолчанию Php+mysql помогите пожалуйста доработать Sql запрос

Привет всем! Народ плз помогите...


Таблица table_1
Поля: id,name

ДАнные в ней:
id | name
-----------------
1 | спойлер
2 | фары


Есть у меня например критерий выборки данных:

1) SELECT table_1.* FROM table_1 WHERE table_1.name='Спойлер' AND table_1.name='Фары'

Естественно 1) вернет 0 записей


2) SELECT table_1.* FROM table_1 WHERE table_1.name='Спойлер' OR table_1.name='Фары'

А второй вариант 2) вернет две записи


А как быть например когда у меня запрос такого вида (просто для примера)

SELECT table_1.* FROM table_1 WHERE (table_1.name='Спойлер' OR table_1.name='Фары') AND (table_1.name='Спойлер' OR table_1.name='Фары')

Он вернёт тоже 0 результатов...


Все это я говорю к случаю поиска....Т.е например ползьзователь вводит в строку поиска выражение 'спойлер фары'
Для полнроценного поиска (т.е если выражение не встречается ЦЕЛИКОМ ни в одном поле) я разбиваю его на слова и уже конкретно ищу совпадения каждого слова для каждого поля (т.е как в последнесм запросе).
Таким образом если 'фары' и 'спойлер' находятся в одном ряду (колонке) то последний запрос работать не будет...
Как же тогда быть? Ведь когда запрос формируется динамически там не предусмотришь какое слово в каком поля(колонке) искать.


Приношу заранее извинения за запутанность вопроса...Надеюсь кто-нить поймет всетаки...а если нет то пожалуйста пишите - я с удовольствием объясню непонятные моменты...

Старый 22.06.2004, 02:44
kompadre вне форума Посмотреть профиль Отправить личное сообщение для kompadre Найти все сообщения от kompadre
  № 2  
kompadre
 
Аватар для kompadre

Регистрация: Aug 2001
Адрес: Barcelona
Сообщений: 1,277
Отправить сообщение для kompadre с помощью ICQ
Цитата:
...а если нет то пожалуйста пишите - я с удовольствием объясню непонятные моменты...
Пишу, блин ...

На кого чорта тебе AND? Разбиваешь по словам и ищешь условием OR. Если ненужны дубликаты указываешь в запросе что-бы он групировался нужному тебе полю в таблице (GROUP BY).


Последний раз редактировалось kompadre; 22.06.2004 в 02:47.
Старый 22.06.2004, 09:51
Crazy вне форума Посмотреть профиль Отправить личное сообщение для Crazy Посетить домашнюю страницу Crazy Найти все сообщения от Crazy
  № 3  
Crazy
[+1 23.05.11]
 
Аватар для Crazy

Регистрация: Dec 2001
Сообщений: 4,159
По умолчанию Re: Php+mysql помогите пожалуйста доработать Sql запрос

Цитата:
Оригинал написал(а) igor82
Он вернёт тоже 0 результатов...
Он вернет 2 записи.
__________________
GIT d++ s++:++ a C++$ UB++ P++ L+ E+ W+++ N++ w++ O+ M V- t-- 5-- X+ R+++ tv- b+++ D++

Старый 22.06.2004, 11:16
Constantine вне форума Посмотреть профиль Отправить личное сообщение для Constantine Посетить домашнюю страницу Constantine Найти все сообщения от Constantine
  № 4  
Constantine
 
Аватар для Constantine

Регистрация: Jun 2000
Адрес: $_SERVER['REMOTE_ADDR']
Сообщений: 854
Как на счет полнотекстового поиска?
Поле name сделать полнотекстовым индексом и вперед:
SELECT id, name FROM table1 WHERE MATCH (name) AGAINST ('Спойлер Фары');
Вернет оба...

Старый 22.06.2004, 14:16
igor82 вне форума Посмотреть профиль Отправить личное сообщение для igor82 Найти все сообщения от igor82
  № 5  
igor82

Регистрация: Apr 2002
Адрес: Россия, Воронеж
Сообщений: 121
Отправить сообщение для igor82 с помощью ICQ Отправить сообщение для igor82 с помощью Yahoo
Цитата:
Оригинал написал(а) kompadre


Пишу, блин ...

На кого чорта тебе AND? Разбиваешь по словам и ищешь условием OR. Если ненужны дубликаты указываешь в запросе что-бы он групировался нужному тебе полю в таблице (GROUP BY).

Вот смотри....Допустим пользователь ввель в поиске это выражение 'ford спойлер фары'.....Если сделать по-твоему т.е поставить OR то БД будет искать совпадиния или для Ford или для СПОЙЛЕР или для ФАРЫ....А если у меня в БД помимо спойлеров и фар есть именно для FORDа ещё: глушители, колесные диски и т.д...Таким образом вместо того чтобы вывести форды с фарами и спойлерами - БД навыводит мне FORDов з глушителями и дисками....что недопустимо.....

Может я просто не знаю чего? Или есть какие либо специальные алгоритмы для такого поиска?

Старый 22.06.2004, 17:55
http вне форума Посмотреть профиль Отправить личное сообщение для http Посетить домашнюю страницу http Найти все сообщения от http
  № 6  
http

Регистрация: Oct 2003
Адрес: Украина, Киев
Сообщений: 45
Отправить сообщение для http с помощью ICQ
igor82


Вопрос. Зачем писать постоянно table_1.
Например: table_1.name; table_1.*
Если можно просто name; *
Попробуй так. Легче жить будет

Цитата:
SELECT table_1.* FROM table_1 WHERE (table_1.name='Спойлер' OR table_1.name='Фары') AND (table_1.name='Спойлер' OR table_1.name='Фары')
Это что ещё за бред

Просто делай цикл и выбирай свои слова из БД, Но по одному
__________________
Mr_Andruha

Старый 22.06.2004, 19:23
igor82 вне форума Посмотреть профиль Отправить личное сообщение для igor82 Найти все сообщения от igor82
  № 7  
igor82

Регистрация: Apr 2002
Адрес: Россия, Воронеж
Сообщений: 121
Отправить сообщение для igor82 с помощью ICQ Отправить сообщение для igor82 с помощью Yahoo
Цитата:
Оригинал написал(а) http
igor82


Вопрос. Зачем писать постоянно table_1.
Например: table_1.name; table_1.*
Если можно просто name; *
Попробуй так. Легче жить будет



Это что ещё за бред

Просто делай цикл и выбирай свои слова из БД, Но по одному

Не понял причем тут цикл и как его сюда пределать.....Мне не нужно по одному .. Если у меня есть фраза 'ford спойлер фары' мне нужно чтобы БД нашла совпадения не для каждого слова по отдельность а для всей связки по возможность....

Т.е чтобы вывелись результаты где встречается либо FORD и СПОЙЛЕР либо FORD и ФАРЫ либо СПОЙЛЕР И ФАРЫ....а не по отдельность для фар для спойлеров и для фордов...

Старый 22.06.2004, 19:33
kompadre вне форума Посмотреть профиль Отправить личное сообщение для kompadre Найти все сообщения от kompadre
  № 8  
kompadre
 
Аватар для kompadre

Регистрация: Aug 2001
Адрес: Barcelona
Сообщений: 1,277
Отправить сообщение для kompadre с помощью ICQ
Послушай, а то что в прошлом топике проходили ни как не прикрутить?

к примеру
Код:
SELECT table_1.* FROM table_1 WHERE 
name like '%Спойлер%' and name like '%фары%'

Старый 22.06.2004, 19:40
styx вне форума Посмотреть профиль Отправить личное сообщение для styx Найти все сообщения от styx
  № 9  
styx

Регистрация: Apr 2003
Сообщений: 243
Насколько я понял, Вы хотите, сделать поиск нескольких слов (допустим, word1, word2 и word3) по нескольким колонкам? Например, field1 и field2. Тогда надо динамически формировать запрос типа

(field1 like word1 and field1 like word2 and field1 like word3)
or
(field2 like word1 and field1 like word2 and field1 like word3)
or
(field1 like word1 and field2 like word2 and field1 like word3)
or
(field2 like word1 and field2 like word2 and field1 like word3)
or
(field1 like word1 and field1 like word2 and field2 like word3)
or
(field2 like word1 and field1 like word2 and field2 like word3)
or
(field1 like word1 and field2 like word2 and field2 like word3)
or
(field2 like word1 and field2 like word2 and field2 like word3)

Только оно Вам надо? Выходов два - или действительно используете match - чего я не практикую, потому как match пока в MySQLе какой-то... не совсем зрелый... - или сделать отдельное поле, в которое складывать содержимое всех полей, по которым надо искать, и искать только в нём. Я бы выбрал второй вариант... Хотя динамическое формирование конструкций типа приведённой тоже приходилось использовать - но имейте в виду, что SQL-оптимизатору от такой конструкции грустно...

Надеюсь, что объяснил понятно

Старый 22.06.2004, 22:27
igor82 вне форума Посмотреть профиль Отправить личное сообщение для igor82 Найти все сообщения от igor82
  № 10  
igor82

Регистрация: Apr 2002
Адрес: Россия, Воронеж
Сообщений: 121
Отправить сообщение для igor82 с помощью ICQ Отправить сообщение для igor82 с помощью Yahoo
Цитата:
Оригинал написал(а) styx
Насколько я понял, Вы хотите, сделать поиск нескольких слов (допустим, word1, word2 и word3) по нескольким колонкам? Например, field1 и field2. Тогда надо динамически формировать запрос типа

(field1 like word1 and field1 like word2 and field1 like word3)
or
(field2 like word1 and field1 like word2 and field1 like word3)
or
(field1 like word1 and field2 like word2 and field1 like word3)
or
(field2 like word1 and field2 like word2 and field1 like word3)
or
(field1 like word1 and field1 like word2 and field2 like word3)
or
(field2 like word1 and field1 like word2 and field2 like word3)
or
(field1 like word1 and field2 like word2 and field2 like word3)
or
(field2 like word1 and field2 like word2 and field2 like word3)

Только оно Вам надо? Выходов два - или действительно используете match - чего я не практикую, потому как match пока в MySQLе какой-то... не совсем зрелый... - или сделать отдельное поле, в которое складывать содержимое всех полей, по которым надо искать, и искать только в нём. Я бы выбрал второй вариант... Хотя динамическое формирование конструкций типа приведённой тоже приходилось использовать - но имейте в виду, что SQL-оптимизатору от такой конструкции грустно...

Надеюсь, что объяснил понятно

Просто даже не представляю как свалить все в одно поле....База данных распределенная и вней куча таблиц по которым и происходит поиск.....Попробую ваш запрос...надеюсь что сраюотает....

Создать новую тему   Часовой пояс GMT +4, время: 11:55.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 11:55.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.