PDA

Просмотр полной версии : Онлайн база номеров


De1eT
18.12.2005, 11:01
Есть онлайн база http://icq.xss.ru/
Кто может сделать такую же,но чтоб при одном запросе выдавала список по годам,то есть,я задал номер 365056 а мне выдало
2002: 365056:me@dyra.com
2003: none
2004: 365056:y_ne@dyra.com
2005: xрен

вот так :)
эту базу мы повесив в разделе асекью

fucker"ok
18.12.2005, 13:53
В принципе ничего сложного. Можно сделать базу структурой:
uin, 2002, 2003,2004, 2005 где в годах будет мыло :]
Если я смогу вытянуть эти базы (у меня модем), то попробую сделать.

De1eT
18.12.2005, 14:07
сделай просто на тестовых базах.то есть создай наобуум несколько строк
типа :
234232:y_ne@dyra.com
888199:y8908@d890ra.com

fucker"ok
18.12.2005, 20:31
Уже удалось кое-что сделать а именно:

Я сгенирировал базу 100001-999999
Для каждого уина есть емайлы за определённые года 2000 2003 2004 2005
можно задавать маски * или ? (как http://icq.xss.ru/)
Все запросы кешируются (при повторном запросе sql сервер не задейсвован)


Правда поиск по email я ещё не добавил, нужно придумать маску
Думаю допустимыми символами будут: a-z 0-9 _ - .
Вроде, если емайл не входит в эту маску, то он не может реально существовать (если я неправ - поправте!)
Все емайлы сгенирированны! Любой совпадение есть чудо! :p
Думаю завтра доделаю поиск по емайлам и начну добавлять базы. (нашёл только за 2003 год и то с левой кодировкой :( )
Вот такие пироги...
http://mailovka.ru/icq/

Trinux
18.12.2005, 21:39
Нужно сделать обязательно постраничный вывод, я думаю. Потому как наблюдать все сразу и неудобно и БД грузит, даже с кешами. Постранично, соответственно, лимитами делать. И вообще подумай над кешами ведь номера будут добавляться постоянно. поиск лучше юзать встроенный в MySQL, очень экономичный к ресурсам, тем более поля для поиска очень короткие. И начиная с 4-ой MySQL поиск там очень даже богатый вшитый, с кучей правил итп.

А вообще на самом то деле, задачи тут простейшие, можно было бы и на текстовиках сделать =)

fucker"ok
19.12.2005, 12:48
поиск лучше юзать встроенный в MySQL
Не очень понимаю как это, я делаю обычный поиск типа:

SELECT * FROM uins WHERE uin=667033;

И вообще подумай над кешами ведь номера будут добавляться постоянно.
(Это кеш страници, а не кеш запроса к БД)
Кеш работает в течении часа, потом странице пресобирается (Smarty рулит :D )

Нужно сделать обязательно постраничный вывод, я думаю.
Вот это как-раз и проблемно:
Если делать постраничный вывод, то нам ведь всё-равно нужно как-то определить кол-во страниц? :] Тоесть запрос будет полноценный.
Можно сделать так:
Ограничить вывод в 100 уинов (LIMIT 0 , 101)
Добавить поле, которое задаёт значение "откуда начинать"
Например по запросу всего 500 уинов, нам надо узнать промежуток от 300-ого уина, тогда мы в это поле вводим 300 (запрос будет LIMIT 300, 101)

Теперь почему 101, если вывод 100.
101-ого уина не будет в выводе, но если у него есть значение, то значит есть и следущая страница :]

Deem3n®
19.12.2005, 13:45
В принципе ничего сложного. Можно сделать базу структурой:
uin, 2002, 2003,2004, 2005 где в годах будет мыло :]
Если я смогу вытянуть эти базы (у меня модем), то попробую сделать.
Этот структура рабочая но неправильная. Неправильная потому что когда появятся новые базы (2006 и 2007 годов) ты должен будешь модифицировать структуру БД (добавляя новые атрибуты 2006, 2007).
Лучше всего воспользоватся структурой вида:
uin, year, mail - где поля year и uin ключевые.
Сразу отпадает проблема поиска по мылу

fucker"ok
19.12.2005, 20:50
Deem3n®: Да возможно это и не лучший вариант, дабы я не очень силён в SQL, но мой способ простой и понятный (для меня).
Да, когда будут появлятся новые базы за новый год, то это дело прийдётся немного править (добавить пару строк), но вся прелесть в том, что раз в год можно выделеть несколько минут на это :D
Если я тебя правельно понял, то хочешь хранить в базе уины так (напиши правельно понял, или нет):
uin year mail
667033 2001 vasya@mail.ru
667033 2002 peta@mail.ru
и тд

В принципе у меня скрипт готов. Осталось только придать дизайн и добавить кнопку "к следущей странице" (сегодня сделаю, но не успею выложить инет до 8) Ну и добавлять базы...
Поиск емайла может быть по маске и за определённый год (не забывайте ставить галочку "год" (можно поставить все) )
Ещё есть идея собрать все ники и uid юзеров форума у кого 6-ти знаки, тогда в дополнительном поле будет имя и ссылка на профиль (если администрация поддержит, то будет класно :) )
Тестируем! О багах постим сюда

http://mailovka.ru/icq

Deem3n®
20.12.2005, 13:03
uin year mail
667033 2001 vasya@mail.ru
667033 2002 peta@mail.ru
и тд

ну в принципе так, но для экономии сделай тип атрибута year - tinyint:

CREATE TABLE base
(
uin INT,
year TINYINT,
mail VARCHAR(40)
);
ALTER TABLE base
MODIFY COLUMN `year` TINYINT,
MODIFY COLUMN `uin` INT,
ADD PRIMARY KEY (uin, year);

uin year mail
667033 99 fedya@mail.ru
667033 01 vasya@mail.ru
667033 02 peta@mail.ru

PS:
для чего предназначена опция "Вывод от:"?

Trinux
21.12.2005, 13:47
В MySQL сущесвтует собственный поиск, в мане прочти о MATCH() AGAINST() вроде так. работает. Хотя тут можно и обойтись обычным LIKE с его % и ?. Создавать кеш на час... да, возможно это как вариант, только при добавлении нового номера задерка вывода будет примерно пол часа. В принципе это не критично. Насчет постраничного вывода, что может быть проще? Маленький запро SELECT COUNT() не сильно загрузит сервак. Зато будет очень удобно листать, например, по 50 номеров.

fucker"ok
21.12.2005, 15:58
для чего предназначена опция "Вывод от:"
Это значение идёт в запос как ... LIMIT значение , 100
Твое постронние БД тоже подходит, но в таком случае база будет очень большая и запросы будут выполнятся долго (имхо)
Хотя тут можно и обойтись обычным LIKE с его % и ?.
Так и сделанно :p
Маленький запро SELECT COUNT()
Вот тут интересный случай:
Сам запрос SELECT COUNT(*) даст нам полное кол-во номеров, НО ведь нам надо узнать это количество при определённом условии? Тоесть запросу всё-равно прийдётся пройтись по базе (иначе мы не узнаем кол-во страниц).
Так-что лучше просто сделать ссылки "вперёд", "назад". :]

ЗЫ
Вчера был на курсах, поэтому ничего не доделал, попробую сегодня.

qBiN
21.12.2005, 18:15
Smarty рулит уууу...Скорость работы не жалко??

nerezus
21.12.2005, 18:37
Скорость работы не жалко?? smarty очень быстрый.

fucker"ok
21.12.2005, 20:56
Добавил странички перехода. Теперь задав к прмеру в uin знак "*", можно перейти на следущую (и на предидущую) Чего нет даже на icq.xss.ru :)
В дизайн внес немного античата :p
остались только базы. Хотелось бы услышать оценку от заказчика - Делита :d

http://icq.mailovka.ru/

De1eT
22.12.2005, 01:16
хм,fucker"ok очень хорошо,я поговорю с егорычем, можешь выложить на форуме исходники

fucker"ok
22.12.2005, 16:52
Это сами сурсы и шаблоны
http://mailovka.ru/files/icq.tgz (3kb)
Все файлы в кодировке koi8-r
inc/connect.php нужно настроить на ваш sql сервер
base.sqlструктура базы
templates/ шаблоны
index.php нужно настроить путь к скрипту и путь к Smarty

для шаблонов я использовал Smarty (по привычке)
http://smarty.php.net/

Я особо не питал надежд что сделаю лучше всех, это просто спортивный интерес :p

Trinux
22.12.2005, 20:03
smarty очень быстрый.
Это с каких щей =))) Самосвал, он хоть и перевозит много груза и вообще разнорабочий, все равно по прямой его Ferrari обгонит. Вот вы мне что угодно говорите, но я никогда не поверю, что вывести строку в браузер
"123"
через смарти быстрее, чем просто
echo '123';
бред

nerezus
22.12.2005, 20:15
Trinux
я про классические шаблонизаторы.