Онлайн база номеров

Discussion in 'PHP' started by De1eT, 18 Dec 2005.

  1. De1eT

    De1eT пиздюк

    Joined:
    12 Aug 2004
    Messages:
    377
    Likes Received:
    71
    Reputations:
    55
    Есть онлайн база http://icq.xss.ru/
    Кто может сделать такую же,но чтоб при одном запросе выдавала список по годам,то есть,я задал номер 365056 а мне выдало
    2002: 365056:[email protected]
    2003: none
    2004: 365056:[email protected]
    2005: xрен

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

    fucker"ok Elder - Старейшина

    Joined:
    21 Nov 2004
    Messages:
    580
    Likes Received:
    279
    Reputations:
    91
    В принципе ничего сложного. Можно сделать базу структурой:
    uin, 2002, 2003,2004, 2005 где в годах будет мыло :]
    Если я смогу вытянуть эти базы (у меня модем), то попробую сделать.
     
  3. De1eT

    De1eT пиздюк

    Joined:
    12 Aug 2004
    Messages:
    377
    Likes Received:
    71
    Reputations:
    55
    сделай просто на тестовых базах.то есть создай наобуум несколько строк
    типа :
    234232:[email protected]
    888199:[email protected]
     
  4. fucker"ok

    fucker"ok Elder - Старейшина

    Joined:
    21 Nov 2004
    Messages:
    580
    Likes Received:
    279
    Reputations:
    91
    тестируем

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

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

    Trinux Members of Antichat

    Joined:
    26 Nov 2004
    Messages:
    1,403
    Likes Received:
    296
    Reputations:
    364
    Нужно сделать обязательно постраничный вывод, я думаю. Потому как наблюдать все сразу и неудобно и БД грузит, даже с кешами. Постранично, соответственно, лимитами делать. И вообще подумай над кешами ведь номера будут добавляться постоянно. поиск лучше юзать встроенный в MySQL, очень экономичный к ресурсам, тем более поля для поиска очень короткие. И начиная с 4-ой MySQL поиск там очень даже богатый вшитый, с кучей правил итп.

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

    fucker"ok Elder - Старейшина

    Joined:
    21 Nov 2004
    Messages:
    580
    Likes Received:
    279
    Reputations:
    91
    Не очень понимаю как это, я делаю обычный поиск типа:
    Code:
    SELECT * FROM uins WHERE uin=667033;
    
    (Это кеш страници, а не кеш запроса к БД)
    Кеш работает в течении часа, потом странице пресобирается (Smarty рулит :D )

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

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

    Deem3n® RTFMSDN

    Joined:
    19 Sep 2005
    Messages:
    378
    Likes Received:
    153
    Reputations:
    164
    Этот структура рабочая но неправильная. Неправильная потому что когда появятся новые базы (2006 и 2007 годов) ты должен будешь модифицировать структуру БД (добавляя новые атрибуты 2006, 2007).
    Лучше всего воспользоватся структурой вида:
    uin, year, mail - где поля year и uin ключевые.
    Сразу отпадает проблема поиска по мылу
     
    1 person likes this.
  8. fucker"ok

    fucker"ok Elder - Старейшина

    Joined:
    21 Nov 2004
    Messages:
    580
    Likes Received:
    279
    Reputations:
    91
    Deem3n®: Да возможно это и не лучший вариант, дабы я не очень силён в SQL, но мой способ простой и понятный (для меня).
    Да, когда будут появлятся новые базы за новый год, то это дело прийдётся немного править (добавить пару строк), но вся прелесть в том, что раз в год можно выделеть несколько минут на это :D
    Если я тебя правельно понял, то хочешь хранить в базе уины так (напиши правельно понял, или нет):
    uin year mail
    667033 2001 [email protected]
    667033 2002 [email protected]
    и тд

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

    http://mailovka.ru/icq
     
    #8 fucker"ok, 19 Dec 2005
    Last edited: 19 Dec 2005
  9. Deem3n®

    Deem3n® RTFMSDN

    Joined:
    19 Sep 2005
    Messages:
    378
    Likes Received:
    153
    Reputations:
    164
    ну в принципе так, но для экономии сделай тип атрибута year - tinyint:
    Code:
    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 [email protected]
    667033 01 [email protected]
    667033 02 [email protected]

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

    Trinux Members of Antichat

    Joined:
    26 Nov 2004
    Messages:
    1,403
    Likes Received:
    296
    Reputations:
    364
    В MySQL сущесвтует собственный поиск, в мане прочти о MATCH() AGAINST() вроде так. работает. Хотя тут можно и обойтись обычным LIKE с его % и ?. Создавать кеш на час... да, возможно это как вариант, только при добавлении нового номера задерка вывода будет примерно пол часа. В принципе это не критично. Насчет постраничного вывода, что может быть проще? Маленький запро SELECT COUNT() не сильно загрузит сервак. Зато будет очень удобно листать, например, по 50 номеров.
     
    _________________________
  11. fucker"ok

    fucker"ok Elder - Старейшина

    Joined:
    21 Nov 2004
    Messages:
    580
    Likes Received:
    279
    Reputations:
    91
    Это значение идёт в запос как ... LIMIT значение , 100
    Твое постронние БД тоже подходит, но в таком случае база будет очень большая и запросы будут выполнятся долго (имхо)
    Так и сделанно :p
    Вот тут интересный случай:
    Сам запрос SELECT COUNT(*) даст нам полное кол-во номеров, НО ведь нам надо узнать это количество при определённом условии? Тоесть запросу всё-равно прийдётся пройтись по базе (иначе мы не узнаем кол-во страниц).
    Так-что лучше просто сделать ссылки "вперёд", "назад". :]

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

    qBiN Вот такой вот я :(

    Joined:
    20 Jan 2005
    Messages:
    834
    Likes Received:
    73
    Reputations:
    33
    уууу...Скорость работы не жалко??
     
  13. nerezus

    nerezus Banned

    Joined:
    12 Aug 2004
    Messages:
    3,191
    Likes Received:
    729
    Reputations:
    266
    smarty очень быстрый.
     
    1 person likes this.
  14. fucker"ok

    fucker"ok Elder - Старейшина

    Joined:
    21 Nov 2004
    Messages:
    580
    Likes Received:
    279
    Reputations:
    91
    Добавил странички перехода. Теперь задав к прмеру в uin знак "*", можно перейти на следущую (и на предидущую) Чего нет даже на icq.xss.ru :)
    В дизайн внес немного античата :p
    остались только базы. Хотелось бы услышать оценку от заказчика - Делита :d

    http://icq.mailovka.ru/
     
    1 person likes this.
  15. De1eT

    De1eT пиздюк

    Joined:
    12 Aug 2004
    Messages:
    377
    Likes Received:
    71
    Reputations:
    55
    хм,fucker"ok очень хорошо,я поговорю с егорычем, можешь выложить на форуме исходники
     
  16. fucker"ok

    fucker"ok Elder - Старейшина

    Joined:
    21 Nov 2004
    Messages:
    580
    Likes Received:
    279
    Reputations:
    91
    Это сами сурсы и шаблоны
    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
     
    #16 fucker"ok, 22 Dec 2005
    Last edited: 22 Dec 2005
    1 person likes this.
  17. Trinux

    Trinux Members of Antichat

    Joined:
    26 Nov 2004
    Messages:
    1,403
    Likes Received:
    296
    Reputations:
    364
    Это с каких щей =))) Самосвал, он хоть и перевозит много груза и вообще разнорабочий, все равно по прямой его Ferrari обгонит. Вот вы мне что угодно говорите, но я никогда не поверю, что вывести строку в браузер
    "123"
    через смарти быстрее, чем просто
    echo '123';
    бред
     
    _________________________
  18. nerezus

    nerezus Banned

    Joined:
    12 Aug 2004
    Messages:
    3,191
    Likes Received:
    729
    Reputations:
    266
    я про классические шаблонизаторы.