• Data-mining в 40 строк или С кем и против кого вы заодно

    Находим единомышленников и противников друзей и врагов среди пользователей сайта на Drupal, используя данные votingapi.

    Делаем выборку данных


    SELECT v1.uid uid1, v2.uid uid2, u1.name name1, u2.name name2,
      v2.entity_id entity_id, v1.value value1, v2.value value2
    FROM votingapi_vote v1
    JOIN (votingapi_vote v2, users u1, users u2)
     ON (v1.uid != v2.uid AND v1.entity_id=v2.entity_id
       AND v1.entity_type=v2.entity_type AND v1.uid=u1.uid AND v2.uid=u2.uid)
    WHERE v1.uid < v2.uid AND v1.uid != 0 AND v2.uid != 0
    ORDER BY v1.uid,v2.uid;


    JOIN таблицы votingapi_vote на себя саму выбирает все пермутации пар пользователей, а условие v1.uid < v2.uid превращает пермутации в комбинации.

    Условие v1.entity_id=v2.entity_id AND v1.entity_type=v2.entity_type позволяет выбрать голоса, которые пользователи отдали за одну и ту же тему или комментарий. Скажем, первая строчка в нашей выборке означает, что Administrator и Bob дали 100 очков одной и той же теме или одному и тому же комментарию.

    Условие v1.uid != 0 AND v2.uid != 0 исключает анонимные комментарии.

    В результате получаем таблицу из шести колонок:
    Читать дальше →