Модераторы: skyboy, MoLeX, Aliance, ksnk

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Поиск, по БД 
:(
    Опции темы
Aliance
Дата 7.5.2005, 20:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: 3
Всего: 137



Как организовать поиск, читая данные из БД по слову введенное в инпут.
Из мыслей - только http://dev.mysql.com/doc/mysql/ru/fulltext-search.html
PM MAIL WWW ICQ Skype   Вверх
Mal Hack
Дата 7.5.2005, 20:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 11
Всего: 261



Поиск это выборка, тобишь SELECT, а какие ты условия выборки будешь делать (WHERE) это уже отдельный разговор. Можно и =, можно и LIKE, можно и REGEX и т.п.
PM ICQ   Вверх
Illuminaty
Дата 7.5.2005, 20:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


/*Антон Захаров*/
***


Профиль
Группа: Комодератор
Сообщений: 1238
Регистрация: 19.3.2005
Где: Россия, Казань

Репутация: 1
Всего: 56



Для начала считать ввденное слово из $_GET или $_POST, потом проверить это слово на корректность (если введено 1324425, а искать надо по фамилии, например), затем составит SQL запрос при помощи ссылки, что ты указал и передать его (запрос) базе данных
PM MAIL ICQ   Вверх
Aliance
Дата 7.5.2005, 21:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: 3
Всего: 137



Вводить можно любые латинские и русские слова.
Лучше передавать Постом, думаю(?)

Цитата(Mal @ 7.5.2005, 21:47)
=, можно и LIKE, можно и REGEX и т.п.

их отличия "на пальцах" объяснишь?
Мне нужно искать не строго слово ( \bSEARCH\b ), а часть в слове/слово, т.е. вводя aaa юзер найдет и все страницы, где встречается aaa но и bbbaaabbb smile

Запрос чтот-то вроде такого:
Код

$search_string = mysql_query(SELECT * WHERE text={$_POST['querysearch']});

PM MAIL WWW ICQ Skype   Вверх
Illuminaty
Дата 7.5.2005, 21:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


/*Антон Захаров*/
***


Профиль
Группа: Комодератор
Сообщений: 1238
Регистрация: 19.3.2005
Где: Россия, Казань

Репутация: 1
Всего: 56



PM MAIL ICQ   Вверх
Mal Hack
Дата 7.5.2005, 21:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 11
Всего: 261



Aliance
почитай в мане про операторы сравнения (логические).
Тебе нужен LIKE '%aaa%'

PM ICQ   Вверх
Aliance
Дата 7.5.2005, 21:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: 3
Всего: 137



Не люблю я англ. маны читать smile
Что понимаю - то не спрашиваю :-)

А...как выводить страницы, где есть такие совпадения?
PM MAIL WWW ICQ Skype   Вверх
Mal Hack
Дата 7.5.2005, 21:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 11
Всего: 261



Цитата(Aliance @ 7.5.2005, 22:40)
А...как выводить страницы, где есть такие совпадения?

Средствами PHP.. mysql_fetch_array

Цитата(Aliance @ 7.5.2005, 22:40)
Не люблю я англ. маны читать smile

там и русский есть, к ьтму же где-то на форуме книжка была...
PM ICQ   Вверх
Aliance
Дата 7.5.2005, 21:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: 3
Всего: 137



Цитата(Mal @ 7.5.2005, 22:43)
Средствами PHP.. mysql_fetch_array

А алгоритм расскажи. У меня нет поля с url каждого поискогого слова... не представляю себе пока...
PM MAIL WWW ICQ Skype   Вверх
Mal Hack
Дата 7.5.2005, 22:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 11
Всего: 261



Ты выполнил запрос.
далее пишешь
while( $row = mysql_fetch_assoc( $result ) )
{ print $row['имя поля'] . "<br>"; }
$row - массив полей одной записи.
PM ICQ   Вверх
Aliance
Дата 7.5.2005, 22:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: 3
Всего: 137



Так мне не имя поля нужно выдавать - мне нужно URL
PM MAIL WWW ICQ Skype   Вверх
Mal Hack
Дата 7.5.2005, 22:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 11
Всего: 261



Цитата(Aliance @ 7.5.2005, 23:41)
Так мне не имя поля нужно выдавать - мне нужно URL

URL час ть которого берется из базы? Ну дык сгенерируй строку в print L)
PM ICQ   Вверх
Aliance
Дата 8.5.2005, 00:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: 3
Всего: 137



Нет, в том-то и дело - URL нет в БД.
Есть страница alert.htm и index.php.
На индексе в поиск ввожу alert и выводиЦЦа ссылка на alert.htm, т.к. в БД есть такая запись и она выводЦЦа на странице alert.htm
PM MAIL WWW ICQ Skype   Вверх
Mal Hack
Дата 8.5.2005, 09:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 11
Всего: 261



Сорри, не понял.. В популярном виде объясни smile
PM ICQ   Вверх
Irokez
Дата 8.5.2005, 10:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


индеец
***


Профиль
Группа: Участник Клуба
Сообщений: 1180
Регистрация: 20.10.2004

Репутация: 3
Всего: 53



Цитата(Aliance @ 8.5.2005, 00:06)
На индексе в поиск ввожу alert и выводиЦЦа ссылка на alert.htm, т.к. в БД есть такая запись и она выводЦЦа на странице alert.htm

а каким образом ты выводишь данные из базы в alert.htm?
PM   Вверх
Aliance
Дата 8.5.2005, 13:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: 3
Всего: 137



Цитата(Irokez @ 8.5.2005, 11:28)
а каким образом ты выводишь данные из базы в alert.htm?

fetch_row

Вот тут кидал мой код:
http://forum.vingrad.ru/index.php?showtopi...ndpost&p=402283
PM MAIL WWW ICQ Skype   Вверх
Irokez
Дата 8.5.2005, 18:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


индеец
***


Профиль
Группа: Участник Клуба
Сообщений: 1180
Регистрация: 20.10.2004

Репутация: 3
Всего: 53



если честно, то так и не понял твой код smile
но если ты хочешь получить ссылку на страницу, где выводятся найденные данные, то у тебя должно быть какое либо соответствие между твоими данными в базе и страницами в которых ты их выводишь. это соответствие - либо еще одна таблица либо название страниц в записях данных.
PM   Вверх
Aliance
Дата 8.5.2005, 18:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: 3
Всего: 137



Итак. Я написал неподумав, признаюсь. Сам себя запутал. Бред...
Давайте все заного.

Я не шибко сильно разбираюсь в мускулах, собсна столкнулся на высшем уровне только позавчера smile
Мне нужно организовать поиск по полю из БД. Это, думаю, легко. Но выводится результаты должны ввиде страниц - где вывод данного поля состоялся, т.е. где есть слово поисковое.
Как это сделать?
Для меня (да и Sardar говорит) наиболее перспективным вариантом является MySQL Fulltext-search
PM MAIL WWW ICQ Skype   Вверх
Irokez
Дата 8.5.2005, 18:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


индеец
***


Профиль
Группа: Участник Клуба
Сообщений: 1180
Регистрация: 20.10.2004

Репутация: 3
Всего: 53



ну к примеру у тебя есть такая таблица:
+---+-------+
| ID | Text |
+---+-------+
т.е. при заходе на index.php?id=3, у тебя будет выводится текст из этой таблицы с ID=3
теперь когда проводишь поиск, тебе выдаются результаты - ID рядов которые удовлетворяют твоему запросу, теперь ты можешь вывести на страницу результаты поиска с урлами: index.php?id=$ID
PM   Вверх
Aliance
Дата 8.5.2005, 18:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: 3
Всего: 137



Не хочу ?id =/
Ведь на большинстве сайтах поиск нормально функционирует...
Эх, сложно это так =(
PM MAIL WWW ICQ Skype   Вверх
Irokez
Дата 8.5.2005, 19:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


индеец
***


Профиль
Группа: Участник Клуба
Сообщений: 1180
Регистрация: 20.10.2004

Репутация: 3
Всего: 53



Цитата(Aliance @ 8.5.2005, 18:58)
Не хочу ?id =/

а как хочешь? smile
PM   Вверх
Aliance
Дата 8.5.2005, 19:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: 3
Всего: 137



простые странички. Сделаем пример на 2ух:

index.php
Код

Поиск:
<INPUT type="text" name="querry" />
<INPUT type="submit" />


array.php
Код

// тут вывод из БД с помощью fetch_row

// слова всякие................
 =ARRAY=
// слова всякие................


Вводим в индексую слово array и болжно вывестись ссылка на вторую, причем независи от е имени (имени страницы).
Учитываем:
регистр не влияет
побокам могут быть другие символы
PM MAIL WWW ICQ Skype   Вверх
Aliance
Дата 22.5.2005, 22:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: 3
Всего: 137



Вот такой код будет работать:
Код

SELECT * FROM `big` WHERE `name` LIKE 'test%' LIMIT 0 , 30 

Но искаться будет только по полю name, а можно ли искать по всем полям (name, qwer, abc...)

И зачем вот это:
LIMIT 0 , 30

Это сообщение отредактировал(а) Aliance - 22.5.2005, 23:39
PM MAIL WWW ICQ Skype   Вверх
Mal Hack
Дата 22.5.2005, 23:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 11
Всего: 261



Цитата(Aliance @ 22.5.2005, 23:31)
Но искаться будет только по полю name, а можно ли искать по всем полям (name, qwer, abc...)

Добавляем AND `somepole` LIKE 'somevalue'...

Цитата(Aliance @ 22.5.2005, 23:31)
LIMIT 0 , 30

первые 30 записей (по сорировке, которй у тебя, кстати, нет), а не все, что есть в таблице
PM ICQ   Вверх
Aliance
Дата 22.5.2005, 23:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: 3
Всего: 137



Так?
Код

SELECT * FROM `big` WHERE `name` AND `somepole` LIKE 'test%'

PM MAIL WWW ICQ Skype   Вверх
Mal Hack
Дата 22.5.2005, 23:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 11
Всего: 261



Код
SELECT * FROM `big` WHERE `name` LIKE 'test%' AND `somepole` LIKE 'test%' LIMIT 0,20


Это сообщение отредактировал(а) Mal Hack - 22.5.2005, 23:44
PM ICQ   Вверх
Aliance
Дата 22.5.2005, 23:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: 3
Всего: 137



Mal Hack
ууу, а если у меня 20 таких полей =(

Цитата(Mal @ 23.5.2005, 00:01)
по сорировке, которй у тебя, кстати, нет

а если мне лимит не нужен - она тоже не нужна?
PM MAIL WWW ICQ Skype   Вверх
Mal Hack
Дата 22.5.2005, 23:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 11
Всего: 261



Цитата(Aliance @ 23.5.2005, 00:52)
а если мне лимит не нужен - она тоже не нужна?

Нужна сортировка - делаешь сортирвку. Нужен лимит - делаешь лимит. Вот и все. Они не зависимы друг от друга. Просто если есть сортировка, то лимит будет делать по данным, уже отсортированным.
PM ICQ   Вверх
Aliance
Дата 23.5.2005, 00:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: 3
Всего: 137



Окей.
И все же вернемся к тому, что мне необходимо было сперва: выводить по найденным совпадениям URL где они встречаются. Нельзя ли как-то обойтись без доп. столбца с url?
PM MAIL WWW ICQ Skype   Вверх
PARROT
Дата 9.7.2005, 22:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2339
Регистрация: 5.1.2005
Где: Спб-ЦарьГрад

Репутация: 3
Всего: 50



Пишу поиск, вот код, укажите на ошибки пожалуйста.
Код

function import ($imp){
        $imp=mysql_query("SELECT * FROM import WHERE `mark` LIKE '$poisk%' AND  `model` LIKE '$poisk%' AND `year` LIKE '$poisk%'  AND `title` LIKE '$poisk%'") or die(mysql_error());
         while ($full=mysql_fetch_row($imp)) {
                  print ($full['mark']."<br/>".$full['model']."<br/>".$full['year']."<br/>".$full['title']."<br/>");
                 }

        }
        import($poisk);

Скрипт ничего не выводит, даже ошибки нет.
Не совсем понимаю что писать в LIKE, сейчас там стоит та переменная которая приходит из формы. smile


--------------------
Безумный утешается прошедшим, слабоумный - будущим, умный - настоящим!
PM MAIL   Вверх
Opik
Дата 9.7.2005, 22:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Vingrad developer
Сообщений: 1918
Регистрация: 6.10.2004
Где: Рига

Репутация: 2
Всего: 55



PARROT
Скрипт ничего не выводит, потому что не находит, AND замени на OR и mysql_fetch_row на mysql_fetch_assoc
Добавлено @ 22:52
function import ($imp) хм, а не $poisk?
PM MAIL Skype   Вверх
PARROT
Дата 10.7.2005, 09:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2339
Регистрация: 5.1.2005
Где: Спб-ЦарьГрад

Репутация: 3
Всего: 50



Код

function import ($imp){
        $imp=mysql_query("SELECT * FROM `import` WHERE `mark` LIKE '%$poisk' AND  `model` LIKE '%$poisk' AND `year` LIKE '%$poisk'  AND `title` LIKE '%$poisk'") or die(mysql_error());
         while ($full=mysql_fetch_assoc($imp)) {
                  print ($full['mark']."<br/>".$full['model']."<br/>".$full['year']."<br/>".$full['title']."<br/>");
                 }

       }
        import($poisk);

Так находит все данные и выводит их на страницу, то есть не то что задаешь в инпуте, но и сверх того. Сейчас заменю AND на OR
Цитата

function import ($imp) хм, а не $poisk?

Почему??? smile


--------------------
Безумный утешается прошедшим, слабоумный - будущим, умный - настоящим!
PM MAIL   Вверх
Opik
Дата 10.7.2005, 10:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Vingrad developer
Сообщений: 1918
Регистрация: 6.10.2004
Где: Рига

Репутация: 2
Всего: 55



function import ($imp){
$imp=mysql_query("SELECT * FROM `import` WHERE `mark` LIKE '%$poisk' AND `model` LIKE '%$poisk' AND `year` LIKE '%$poisk' AND `title` LIKE '%$poisk'") or die(mysql_error());
while ($full=mysql_fetch_assoc($imp)) {
print ($full['mark']."<br/>".$full['model']."<br/>".$full['year']."<br/>".$full['title']."<br/>");
}

}
да и % лучше ставить с обеих сторон.
Цитата
Так находит все данные и выводит их на страницу,

потому что он ишет по пробелу, т.к в переменной не то, что нужно. см. выше.
PM MAIL Skype   Вверх
PARROT
Дата 10.7.2005, 20:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2339
Регистрация: 5.1.2005
Где: Спб-ЦарьГрад

Репутация: 3
Всего: 50



Вот так заработало: smile
Код

 function import ($x) {
                                     $imp=mysql_query("SELECT * FROM import WHERE mark LIKE '%".$x."%'") or die(mysql_error());
                                     if(mysql_num_rows($imp) == 0) {
                                     echo "Ничего не найдено!";
                                     } else {
                                             while ($full=mysql_fetch_assoc($imp)) {
                                             print ($full['mark']."<br/>");
                                             }
                                     }
                                     }
                                     if(isset($_POST['send'])) {
                                     import($poisk);
                                     }

Всем Спасибо!!! smile

Это сообщение отредактировал(а) PARROT - 10.7.2005, 21:45


--------------------
Безумный утешается прошедшим, слабоумный - будущим, умный - настоящим!
PM MAIL   Вверх
Opik
Дата 11.7.2005, 00:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Vingrad developer
Сообщений: 1918
Регистрация: 6.10.2004
Где: Рига

Репутация: 2
Всего: 55



Код

 function import ($x) {
$imp=mysql_query("SELECT * FROM import WHERE mark LIKE '%".$x."%'") or die(mysql_error());
                 $out = '';
                while ($full=mysql_fetch_assoc($imp)) {
                               $out .= $full['mark']."<br/>";
                 }
                 print empty($out) ? 'Ничего не найдено' : $out;
                
}
                                     if(isset($_POST['send'])) {
                                     import($poisk);
                                     }

smile
PM MAIL Skype   Вверх
Страницы: (3) [Все] 1 2 3 
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Базы Данных | Следующая тема »


 




[ Время генерации скрипта: 0.0840 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.