LINUX.ORG.RU

[PHP] Статистический движок

 


0

1

Итак задача - есть опросник с более чем 20 параметрами все данные храняться в базе как JSON задачу поставили сделать страничку со стат анализом - простую то сделать досточно просто OpenFlashChart и в бой - но задача поставилась интереснее - например статистику по определённому параметру как считать? Тоесть по мужчинам по женщинам или по тем кому 34 года ?

★★★

я бы делал так:

1. открываю гугл

2. ввожу критерий

3. смотрю на то что он мне предлагает дополнить

4. проверяю критерий на то что он подходит под мои данные

5. смотрю в нете реализацию

6. перепил

7. профит

visual_pipe
()
Ответ на: комментарий от anonymous

все данные храняться в базе как JSON

O_o ?!?!


Строка вида
{«firstName»: «Иван»,«lastName»: «Иванов»,«address»: { «streetAddress»: «Московское ш., 101, кв.101»,«city»: «Ленинград»,
«postalCode»: 101101},«phoneNumbers»: [«812 123-1234»,«916 123-4567»]
}

Храниццо как VARCAR ячейка таблицы :)

chapay ★★★
() автор топика
Ответ на: комментарий от visual_pipe

[s]6. перепил[/s]

6. Не находим

7. Идём спрашиваем на ЛОРе

8. ПРОФИТ

chapay ★★★
() автор топика
Ответ на: комментарий от chapay

я не совсем понимаю что же ты от нас хочешь

$parametrical_statistique = array();
foreach ($main_statistique as $key => $value) {
    if (fits_the_condition($value, $parameter)) {
        $parametrical_statistique[] = $value;
    }
}
draw_table_or_smth_else($parametrical_statistique);
anonymous
()
Ответ на: я не совсем понимаю что же ты от нас хочешь от anonymous

объясню интуитивно:
Заходишь на страничку видишь графики с десяток другой:
Типа пол возраст размер ног и так далее - тыкаешь на график например с полом и выбираешь пол - мужской - остальные графики меняются в соответствии с тем как проголосовали мужики так и по остальным графикам - тыкаешь например на 43 размер и видешь сколько мужиков имеют 43 размер сколько женщин и какой у них рост у тех кто с 43 размером...вот так вот...

chapay ★★★
() автор топика
Ответ на: комментарий от chapay

то что описано это olap с какой нибудь пайвот таблицей, там анализ графически полностью настраивается под себя...

если предвидится что то кроме «процентов», то использовать R но там надо придумывать самому интерфейс наподобие пайвот таблиц олапа.

psv1967 ★★★★★
()
Ответ на: комментарий от chapay

так чтоли?

<a href="/stats.php?min_age=13&max_age=13&sex=female">
<img src="/some_image.png" />
</a>
<?php

function coalesce() {
    $args = func_get_args();
    foreach ($args as $arg) {
        if (!empty($arg)) {
            return $arg;
        }
    }
    return null;
}

fits_the_condition($value) {
    $min_age = coalesce($_GET['min_age'], 0);
    $max_age = coalesce($_GET['max_age'], 100);
    $sex     = coalesce($_GET['sex'], '*');
    if ($sex != 'male' or $sex != 'female') {
        $sex = '*';
    }

    if ($value['age'] < $min_age) {
        return false;
    }
    if ($value['age'] > $max_age) {
        return false;
    }
    if ($sex != '*' and $value['sex'] != $sex) {
        return false;
    }

    return true;
}
?>
<?php
/* кусок кода из предыдущего моего поста */
?>
anonymous
()
Ответ на: комментарий от anonymous

Это будет я думаю жутко тормозить при условии что анкеты заполняют по 1000-6000 человек в час :)

chapay ★★★
() автор топика
Ответ на: комментарий от r_asian

он опечатался, war car должно быть

anonymous
()
Ответ на: комментарий от pi11

А по нормальному сохранить нельзя в базе? И потом уже обрабатывать?

Я прозреваю, что эта инфа откуда-то жсоном отдаётся, а ТС распарсить её и распихать по нормальному в таблицу(не говоря уж о нескольких) немного ленится

r_asian ★☆☆
()

ТС, то о чем ты говоришь, называется «мастер отчетов».

А по поводу нападок на JSON в базе - неужели никто не слышал про денормализацию?

o
()
Ответ на: комментарий от o

> А по поводу нападок на JSON в базе - неужели никто не слышал про денормализацию?

В данном случае это не денормализация, а просто свалка. И причин хранить в таком виде я сходу придумать не могу.

pi11 ★★★★★
()
Ответ на: комментарий от o

> Можно подробнее?

Ну вот тебе определение из педивикии -

Денормализация (англ. denormalization) — намеренное приведение структуры базы данных в состояние, не соответствующее критериям нормализации, обычно проводимое с целью ускорения операций чтения из базы за счет добавления избыточных данных.



Теперь надеюсь сам догадаешься?

pi11 ★★★★★
()
Ответ на: комментарий от pi11

И что дальше? Я отлично знаю что такое денормализация. И не вижу здесь никакого противоречия даже с определением из Википедии.

Так что ты давай конкретно говори, эксперт-отделочник ;)

o
()
Ответ на: комментарий от o

Это только формально можно считать денормализацией. По факту же это свалка json-строк.

Вот ты пишешь -

А по поводу нападок на JSON в базе - неужели никто не слышал про денормализацию?


Ну и каким боком тут такая «денормализация» нужна? Была бы таблица разбита на ячейки - другое дело.

А если бы он хранил все данные в одной строке ты бы тоже сказал - " неужели никто не слышал про денормализацию"?

Я так подозреваю тут все слышали про денормализацию и использовали при необходимости, но это не тот случай. Или ты новое слово узнал и решил поделиться?

эксперт-отделочник ;)


Не понял?

pi11 ★★★★★
()
Ответ на: комментарий от o

И вообще формально любую ненормализованную БД можно притянуть за уши под определение денормализации.
У ТС-а же даже на поля таблица не разбита, тут вообще говорить о нормализации/денормализации нельзя ИМХО.

Вот если бы он раскидал по полям данные в одной таблице вот тут да - эта таблица была бы денормализована и отлично подходила под задачу.

pi11 ★★★★★
()
Ответ на: комментарий от pi11

>А по нормальному сохранить нельзя в базе? И потом уже обрабатывать?

По-нормальному - это EAV? Или создавать по таблице на каждый опрос, с разными колонками?

anonymous
()
Ответ на: комментарий от anonymous

Все зависит от задачи. Может у ТС-а вообще 1 опрос.
Если запросов много то EAV - как самый простой вариант, возможно nosql тут побыстрее будет если данных много.

pi11 ★★★★★
()
Ответ на: комментарий от pi11

>Если запросов много то EAV - как самый простой вариант

Он относительно сложен в работе, и производительность вполне неплохо проседает на больших таблицах. В случае NoSQL всё проще и быстрее. Кстати, можно воспользоваться и bdb, и какой-нибудь объектно-ориентированной базой вроде zodb.

anonymous
()
Ответ на: комментарий от anonymous

>Он относительно сложен в работе, и производительность вполне неплохо проседает на больших таблицах.

Никто не спорит, но в любом случае это в разы дешевле чем целиком все json данные в памяти сортировать/группировать. Т.е. в любом случае данные нужно хранить в другом виде.

pi11 ★★★★★
()
Ответ на: комментарий от pi11

>Никто не спорит, но в любом случае это в разы дешевле чем целиком все json данные в памяти сортировать/группировать.

Так никто и не предлагает в памяти. В том же couchdb всё через map-reduce делается.

anonymous
()
Ответ на: комментарий от anonymous

Я имел ввиду что так как данные хранятся у ТСа нормального решения видимо нет, т.к. ему придется все данные подгружать для любого запроса.

pi11 ★★★★★
()
Ответ на: комментарий от pi11

Вводные данные такие:
Скрипт PHP-MYSQL в котором создаются опросы с неизвестным количеством полей и неизвестным типом. Задача складировать каждый ответ и выдавать статистику

chapay ★★★
() автор топика
Ответ на: комментарий от chapay

Я вообще мимопроходил. Я РНР давно закопал^W не использую, сорьки.

Nicholass ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.