|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
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 результатов... Все это я говорю к случаю поиска....Т.е например ползьзователь вводит в строку поиска выражение 'спойлер фары' Для полнроценного поиска (т.е если выражение не встречается ЦЕЛИКОМ ни в одном поле) я разбиваю его на слова и уже конкретно ищу совпадения каждого слова для каждого поля (т.е как в последнесм запросе). Таким образом если 'фары' и 'спойлер' находятся в одном ряду (колонке) то последний запрос работать не будет... Как же тогда быть? Ведь когда запрос формируется динамически там не предусмотришь какое слово в каком поля(колонке) искать. Приношу заранее извинения за запутанность вопроса...Надеюсь кто-нить поймет всетаки...а если нет то пожалуйста пишите - я с удовольствием объясню непонятные моменты... |
|
|||||
Цитата:
На кого чорта тебе AND? Разбиваешь по словам и ищешь условием OR. Если ненужны дубликаты указываешь в запросе что-бы он групировался нужному тебе полю в таблице (GROUP BY). Последний раз редактировалось kompadre; 22.06.2004 в 02:47. |
|
|||||
[+1 23.05.11]
Регистрация: Dec 2001
Сообщений: 4,159
|
Re: Php+mysql помогите пожалуйста доработать Sql запрос
Цитата:
__________________
GIT d++ s++:++ a C++$ UB++ P++ L+ E+ W+++ N++ w++ O+ M V- t-- 5-- X+ R+++ tv- b+++ D++ |
|
|||||
Регистрация: Jun 2000
Адрес: $_SERVER['REMOTE_ADDR']
Сообщений: 854
|
Как на счет полнотекстового поиска?
Поле name сделать полнотекстовым индексом и вперед: SELECT id, name FROM table1 WHERE MATCH (name) AGAINST ('Спойлер Фары'); Вернет оба... |
|
|||||
Цитата:
Вот смотри....Допустим пользователь ввель в поиске это выражение 'ford спойлер фары'.....Если сделать по-твоему т.е поставить OR то БД будет искать совпадиния или для Ford или для СПОЙЛЕР или для ФАРЫ....А если у меня в БД помимо спойлеров и фар есть именно для FORDа ещё: глушители, колесные диски и т.д...Таким образом вместо того чтобы вывести форды с фарами и спойлерами - БД навыводит мне FORDов з глушителями и дисками....что недопустимо..... Может я просто не знаю чего? Или есть какие либо специальные алгоритмы для такого поиска? |
|
|||||
igor82
Вопрос. Зачем писать постоянно table_1. Например: table_1.name; table_1.* Если можно просто name; * Попробуй так. Легче жить будет Цитата:
Просто делай цикл и выбирай свои слова из БД, Но по одному
__________________
Mr_Andruha |
|
|||||
Цитата:
Не понял причем тут цикл и как его сюда пределать.....Мне не нужно по одному .. Если у меня есть фраза 'ford спойлер фары' мне нужно чтобы БД нашла совпадения не для каждого слова по отдельность а для всей связки по возможность.... Т.е чтобы вывелись результаты где встречается либо FORD и СПОЙЛЕР либо FORD и ФАРЫ либо СПОЙЛЕР И ФАРЫ....а не по отдельность для фар для спойлеров и для фордов... |
|
|||||
Послушай, а то что в прошлом топике проходили ни как не прикрутить?
к примеру |
|
|||||
Регистрация: 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-оптимизатору от такой конструкции грустно... Надеюсь, что объяснил понятно |
|
|||||
Цитата:
Просто даже не представляю как свалить все в одно поле....База данных распределенная и вней куча таблиц по которым и происходит поиск.....Попробую ваш запрос...надеюсь что сраюотает.... |
Часовой пояс GMT +4, время: 11:55. |
|
« Предыдущая тема | Следующая тема » |
|
|