Re: serialize

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Sent this to bedouglas@xxxxxxxxxxxxx but forgot to copy php-general...
heh. Here it is again.

I would use a table such as
Table
 |_UserData

Then use objects per user to store the data.
class User {
      var TestScore;
      var ScoreType;
      ...
      var Vars;
      function __construct($TestScore, $ScoreType) {
            $this->TestScore = $TestScore;
            $this->ScoreType = $ScoreType;
      }
      function __sleep() {
          $this->Vars = get_object_variables($this);
     }
     ...
     function ListVars() {
            $MyString = "";
            ForEach($this->Vars as $key => $value) {
                  $MyString .= "${key}: ${value}\n";
            }
            Return $MyString;
    }
}
$Joe = new User("WhateverScore", "WhateverType");
$sJoe = Serialize($Joe);
...Store it...


...Recall it...
(Variable result = recieved serialized version of $Joe)
$Joe = unserialize($Result);
$Results = $Joe->ListVars();

etc.

On 9/26/05, Jake Gardner <gardner.jake@xxxxxxxxx> wrote:
> I would use a table such as
> Table
>  |_UserData
>
> Then use objects per user to store the data.
> class User {
>       var TestScore;
>       var ScoreType;
>       ...
>       var Vars;
>       function __construct($TestScore, $ScoreType) {
>             $this->TestScore = $TestScore;
>             $this->ScoreType = $ScoreType;
>       }
>       function __sleep() {
>           $this->Vars = get_object_variables($this);
>      }
>      ...
>      function ListVars() {
>             $MyString = "";
>             ForEach($this->Vars as $key => $value) {
>                   $MyString .= "${key}: ${value}\n";
>             }
>             Return $MyString;
>     }
> }
> $Joe = new User("WhateverScore", "WhateverType");
> $sJoe = Serialize($Joe);
> ...Store it...
>
>
> ...Recall it...
> (Variable result = recieved serialized version of $Joe)
> $Joe = unserialize($Result);
> $Results = $Joe->ListVars();
>
> etc.
>
> On 9/26/05, bruce <bedouglas@xxxxxxxxxxxxx> wrote:
> > murray...
> >
> > it may have been helpful to the guy to also give him an idea of your tbl
> > structure. i think you're talking about something like:
> >  tbl schema
> >
> > EvalTBL
> >   -id
> >   -UserID
> >   -ScoreTypeID
> >
> > ScoreTBL
> >   -id
> >   -ScoreType
> >
> > table ScoreType could/would have as many different categorites as required.
> > table EvalType would have a scoreTypeID (from the ScoreTBL) for each userID.
> > each user could have multiple scoreTypes in the EvalTBL...
> >
> > -bruce
> >
> >
> > -----Original Message-----
> > From: Murray @ PlanetThoughtful [mailto:lists@xxxxxxxxxxxxxxxxxxxx]
> > Sent: Saturday, September 24, 2005 11:49 PM
> > To: 'blackwater dev'; php-general@xxxxxxxxxxxxx
> > Subject: RE:  serialize
> >
> >
> > > I have an app that stores evaluation scores so I have 30+ values all
> > > within a certain range, currently in the db, each of these values has
> > > it's own column:
> > >
> > > Table test
> > >    id
> > >    user_id
> > >    motivation
> > >    caring
> > >    personal_characteristics
> > >    creativity,
> > >    ...etc.
> > >
> > > If the client decides they want to trap more characteristics, it
> > > requires changes to the table structure and the table quickly gets
> > > large with 30+ columns.  I was thinking of just compacting all of
> > > these down to one column and then using serialize/unserialize and
> > > storing an array of the test scores....is this the best way??
> >
> > Hi,
> >
> > This has less to do with PHP (though it will impact on your code) and more
> > to do with database design principles.
> >
> > From what you describe, you have a denormalized table. Ie, every score value
> > has its own field for each thing being scored:
> >
> > Id, score1, score2, score3, score4..., score30
> >
> > 1111, 23, 18, 12, 36...., 38
> > 1112, 45, 12, 62, 25...., 73
> >
> > A more normalized representation of that table would be:
> >
> > Id, scoretype, score
> >
> > 1111, 'score1', 23
> > 1111, 'score2', 18
> > 1111, 'score3', 12
> > 1111, 'score4', 36
> > ....
> > 1111, 'score30', 38
> > 1112, 'score1', 45
> > 1112, 'score2', 12
> > 1112, 'score3', 62
> > 1112, 'score4', 25
> > ....
> > 1112, 'score30', 73
> >
> > Adding a new score type for each id is then as simple as inserting rows for
> > the ids with a new 'scoretype' value, meaning that no change of the actual
> > table structure is required.
> >
> > To retrieve the scores for any given id in your PHP code, you'd do something
> > like:
> >
> > $sql = "SELECT scoretype, score FROM scores WHERE id=1111";
> > $rs = mysql_query($sql);
> > while ($row = mysql_fetch_object($rs)){
> >        $scores[$row->scoretype] = $row->score;
> > }
> > mysql_free_result($rs);
> > print_r($scores);
> >
> > It might be helpful to you to Google on the topic of database normalization.
> >
> > Here's a link from the MySQL site that gives a brief introduction to the
> > topic.
> >
> > http://dev.mysql.com/tech-resources/articles/intro-to-normalization.html
> >
> > Hope this helps.
> >
> > Much warmth,
> >
> > Murray
> > ---
> > "Lost in thought..."
> > http://www.planetthoughtful.org
> >
> > --
> > PHP General Mailing List (http://www.php.net/)
> > To unsubscribe, visit: http://www.php.net/unsub.php
> >
> > --
> > PHP General Mailing List (http://www.php.net/)
> > To unsubscribe, visit: http://www.php.net/unsub.php
> >
> >
>

-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php



[Index of Archives]     [PHP Home]     [Apache Users]     [PHP on Windows]     [Kernel Newbies]     [PHP Install]     [PHP Classes]     [Pear]     [Postgresql]     [Postgresql PHP]     [PHP on Windows]     [PHP Database Programming]     [PHP SOAP]

  Powered by Linux