ФорумПрограммированиеPHP для идиотов → Построить граф связей по друзьям

Построить граф связей по друзьям

  • Абырвалг

    Сообщения: 6480 Репутация: N Группа: Джедаи

    Spritz 3 июля 2010 г. 12:37

    В Моем Круге когда заходишь на страничку кого-то есть такая тема:

    вы -> друг 1, друг2 -> этот кто-то
    или
    вы -> друг 5 -> кто-то еще -> этот кто-то


    Каким образом осуществляется вот такое построение графа?
  • kostyl

    Сообщения: 5210 Репутация: N Группа: Джедаи

    Spritz 3 июля 2010 г. 12:54, спустя 16 минут 59 секунд

    Абырвалг, для хранения ссылок или как? или в базе именно структура?
  • Абырвалг

    Сообщения: 6480 Репутация: N Группа: Джедаи

    Spritz 3 июля 2010 г. 13:02, спустя 8 минут 30 секунд

    в базе стандартно все

    friends
    user_id, friend_id

    Захожу я на страничку Васи и происходит какая-то выборка, после которой можно проследить какие друзья связывают меня с Васей.
  • kostyl

    Сообщения: 5210 Репутация: N Группа: Джедаи

    Spritz 3 июля 2010 г. 13:13, спустя 10 минут 55 секунд

    Абырвалг, честно говоря еще не пробовал, но наверно скоро буду… Скорее всег, какая ширина поиска тебе нужна, столько соединений и будет!
  • artoodetoo

    Сообщения: 5147 Репутация: N Группа: в ухо

    Spritz 3 июля 2010 г. 13:17, спустя 4 минуты 9 секунд

    для одного уровня общих друзей всё просто, а для N видимо есть специальные алгоритмы/экстеншены БД. надо покопать тему. помню когда баловался написанием игр были алгоритмы поиска кратчайшего пути от A до B. как-то надо применить это для реляций в базе
    ιιlllιlllι унц-унц
  • Абырвалг

    Сообщения: 6480 Репутация: N Группа: Джедаи

    Spritz 3 июля 2010 г. 13:30, спустя 12 минут 53 секунды

    artoodetoo, ну, вообще вся эта тема есть и на русском языке. Я на 2 курсе изучал основные алгоритмы на графах в курсе дискретной математики. Но как ты правильно заметил: как это применить к реляционным базам?
  • artoodetoo

    Сообщения: 5147 Репутация: N Группа: в ухо

    Spritz 3 июля 2010 г. 13:30, спустя 9 секунд

  • Абырвалг

    Сообщения: 6480 Репутация: N Группа: Джедаи

    Spritz 3 июля 2010 г. 13:38, спустя 7 минут 44 секунды

    друг друга это же частный случай, ширина поиска совсем маленькая
    Спустя 32 сек.
    не, ну я ща гляну, может там где проскочило универсальное решение
  • Абырвалг

    Сообщения: 6480 Репутация: N Группа: Джедаи

    Spritz 3 июля 2010 г. 13:56, спустя 17 минут 50 секунд

    user_id friend_id
         1         2
         1         3
         1         4
         2         5
         3         5
         4         6
         5         7
         6         8
         7         8


    мы - пользователь с id=1, зашли на страницу пользователя id=8

    1. выбираем всех, у кого этот пользователь в друзьях: [6, 7]
    2. выбираем всех, у кого [6, 7] в друзьях: [4, 5]
    3. выбираем всех, у кого [4, 5] в друзьях: [1, 2, 3]

    оппа, мы есть в выборке, путь какой-то есть))
    шаги 1-3 должны быть в цикле, + добавить $i, $depth для того, что б ограничить глубину поиска.
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 3 июля 2010 г. 14:15, спустя 19 минут 23 секунды

    1 круг друзей - select from friends where guy_id = $id
    2 - select from friends where guy_id in ($1krug) + php group to array
    3 - select from friends where guy_id in 2$krug + php group ..


    Ѯ
    Сапожник без сапог
  • artoodetoo

    Сообщения: 5147 Репутация: N Группа: в ухо

    Spritz 3 июля 2010 г. 14:25, спустя 9 минут 57 секунд

    Ну конечно Дийкстру переводили на русский. Как-то не подумал об этом ))) Стараюсь не упираться в русскую часть интернета, читаю сразу на олбанском, хотя …
    Спустя 96 сек.
    phpdude, сюда нужно добавить условие останова — искомый id присутствует в *krug.
    ιιlllιlllι унц-унц
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 3 июля 2010 г. 14:32, спустя 6 минут 42 секунды

    artoodetoo, а, я не так задачу поянл потому что не читал ее)
    Сапожник без сапог
  • artoodetoo

    Сообщения: 5147 Репутация: N Группа: в ухо

    Spritz 3 июля 2010 г. 14:50, спустя 18 минут 12 секунд

    Главрыба, как насчет того, чтобы сделать минимальную соцсеть? Чтобы не обстрактные примеры дрочить, а предметно, на основе проверенных данных.
    - пользователи, авторизация
    - группы
    - отношения между пользователями
    - новостная лента (события)
    У каждого пользователя как минимум свой статус и блог. у группы тоже блог.

    я хочу чтобы ты заебался
    ιιlllιlllι унц-унц
  • Абырвалг

    Сообщения: 6480 Репутация: N Группа: Джедаи

    Spritz 3 июля 2010 г. 15:26, спустя 35 минут 54 секунды

    можно, если в теории от этого может быть какой-то профит. Например, кто-то посмотрит на мои поделки и возьмет на работу.

    Каждый делает сам (ты на Qb, я на BL) или вместе?)
    Какие сроки примерно? Я начать могу недели через две
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 3 июля 2010 г. 15:46, спустя 20 минут 20 секунд

    ололо баттл забили!
    Сапожник без сапог

Пожалуйста, авторизуйтесь, чтобы написать комментарий!