On 21-Jun-2003 Jay Fitzgerald wrote:
> I am writing a php event registration system for lanparties and I believe
> I have everything written that I need except for a seating selection
> chart.

<snip>
 
> As a person goes through the event registration system, they will come to
> a 
> page that displays 8 rows of 30 seats (240 seats total)...but in the
> future 
> I would like to have admin capability to increase or decrease this
> amount. 

<snip>


> Then when the next person decides to register, when they get to that
> page, one less seat will be available. I would like to have as much
> control as  possible and I do know a minor bit of php and mysql.
> 
> Any help or guidance is appreciated.
> 

<programmer doodle>

Couple of thoughts ...

Each 'event' is unique to time and place. 
So you'll need a 'event' table with datetime, interval, name,
description and a place (or 'forum' --see next paragraph).

table event (
  id int unsigned auto_inc primary key,
  idforum int unsigned,
  ebeg datetime not null,             // begins
  eend datetime not null default '0', // ends
  emin int unsignd default 0,         // how long in minutes 
  name varchar(64),
  descript text,
  index idx_b (ebeg),                  // might be handy ...
  index idx_f (idforum)
)
 
Each place is (usually) limited to hosting one 'event' at any interval.
But some places can have several events at the same time. Consider a major
hotel and all the conference rooms --or a sports stadium with all the
owner, boxholder's, home-team, & visting-team parties ...

So 'place' is a poor term. I'll suggest using 'forum' as the locale to be
to attend a particular event.

Also you'll have to think about assigned seating and/or general admission
seating. 

Example:

At the downtown Hilton, the local Lions club might reserve the "Omega" room
w/ 5 seats per 4 tables, general admission. 
But a dinner with President Bush in the "Omega" room is gonna run like 6
seats @ 40 tables. And definitely assigned seating.

Same room name but clearly a different 'forum'.

It's a toss-up if this should be a field in the 'event' or in the
'forum' table. I go with forum.

So there's another table:

table forum (
  id int unsigned auto_inc primary,
  name varchar(16),
  descript text,
  ftype enum('A', 'G'),             // assigned or general seating
  m_block int unsigned not null,    // max # of seating blocks
  m_seats int unsigned not null,    // seats per block
  block_type enum('row','table','section') not null default 'row',
     // what does m_block encompass?
  seat_limit int unsigned not null default 0,
     // maximum seats (m_block * m_seats where ftype='A')
  unique index (name)
)

Then there is seating. 

When each event/forum is scheduled your app adds m_block * m_seats to 
a seating table.

For general admission add block=x, seat=1 -> seat_limit.

 --- 

The 'seating' table is where it gets tricky --and where it gets solved.

table seating (
  idforum int unsigned not null,  // link to forum description.
  block int unsigned not null,    // a dinner table or stadium row
  seat int unsigned not null,     // d'oh
  guest int unsigned not null default 0, // who has this seat ? 
  primary key (idforum, block, seat),
  INDEX idx_g (guest)             // handy stuff.
)

Assigned seating:

As each guest reserves a [optional] seat:
"UPDATE seating SET guest='$idguest' 
  WHERE idforum='$idforum' AND block='$idblock' [AND seat='$idseat']
  AND guest=0"

General admission:

"UPDATE seating SET guest='$idguest' 
  WHERE idforum='$idforum' AND block='$idblock'
  AND guest=0"

</programmer doodle>

Regards,
-- 
Don Read                                       [EMAIL PROTECTED]
-- It's always darkest before the dawn. So if you are going to 
   steal the neighbor's newspaper, that's the time to do it.

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

Reply via email to