Forum Webscript.Ru
Программирование => PHP => Тема начата: dub от 12 Мая 2002, 16:16:00
-
Есть нехитрая текстовая база, организованная примерно следующим образом:
$id1||$xx1::$yy1::$zz1
$id2||$xx2::$yy2::$zz2
$id3||$xx3::$yy3::$zz3
Поле $id - ясное дело - id.
Поле $xx - скажем, текстовое.
Поля $yy, $zz - численные.
Нужно поиск. Критериям поиска - текст, сравниваемый с $xx (скажем, с помощью функции strstr()), $yymin, $yymax, $zzmin, $zzmax.
Итак, обхожу я все строки базы и заношу, скажем, в массив значения id всех позиций, удовлетворивших все критерии поиска (за базовый вариант возьмем логику "И").
Что дальше делать с этим массивом? Как выводить результаты по 10, скажем, на странице? Массив должен быть глобальным? Или результат нужно сохранить во временном файле? Или еще как-нибудь? Что должно произойти при повторном поиске?
Всем заранее спасибо.
-
Тебе надо заносить в массив только первые (вторые, третьи..) 10 позиций. (Это если ты не сортируешь).
Но для перегруженного запросами сайта - да можно кешировать в файл результаты поиска (указывая какой именно поиск делался).
-
Можно сделать так, прочитать в массив весь файл, с помощью file (http://ru.php.net/manual/ru/function.file.php)
и осуществлять поиск уже в нем, т.е. последовательно обходить все эл-ты массива и выводить рез-т.
а при повторном поиске - снова, считать, искать, и т.д.
-
То есть, прочитать весь файл в массив с помощью file(), провести выборку в массив $selection=array(), подсчитать количество его элементов. Если количество его элементов <= 10 - вывести. Если больше десяти - вывести и поставить ссылку на те же действия, но с переменной, скажем, $desyatok = 2. Те же действия, если установлена переменная $desyatok, опять проделывают все с самого начала, но выводят вторые 10 элемента вновь полученного массива $selection, ссылку с переменной $desyatok равной ($desyatok-1) и ссылку с переменной $desyatok равной ($desyatok+1), если количество элементов массива больше $desyatok*10...
Таким образом, каждый раз задаются все критерии поиска, осуществляется полная выборка и ее обработка. Никаких сессий, единожды полученного и сохраненного массива или подобной лабуды, я правильно понял?
-
вообщем да.
-
Ессно, если массив >1000 то будет тормозить :^))))
-
Гы.. К данному случаю не относится, но все-таки интересно..
Скажем, база на >1000 элементов, и организую я ее, к примеру, уже с помощью MySQL (насколько я понимаю, текстовой такую базу делать - уже маразм, или не в этом дело?). И как дело обстоит в этом случае? Логика работы поиска будет оставаться той же? Только запросы изменятся?
-
Britva , Oak, спасибо огромное.. :)
-
select from table where name=\'lalaa\'
select from table where name like \'%template%\'
....
а разбивать на страницы с помощью select ... limit start,count