Gå til innhold

Beregne -> sortere -> skrive ut


Anbefalte innlegg

Heisann!

 

Holder på med et system for en fotballturnering. Der har jeg har en kamp-tabell hvor jeg lagrer hid (hjemmelag), bid (bortelag), hmaal (hjemmemål) og bid (bortemål), og vil utifra dette lage tabeller. Altså hvis hmaal er større enn bmaal, skal hjemmelaget få tre poeng, og målforskjellen oppdateres for begge lagene. Så skal disse sorteres etter poeng og målforskjell og deles inn klasser (som har sluttspill - Ja/Nei) og grupper. Klasseid og gruppid laget tilhører ligger i lag-tabellen min. Noen som kan gi meg et hint om hvor jeg kan begynne, og eventuelt hjelpe meg med dette?

CREATE TABLE `kamp` (
 `kampid` smallint(5) NOT NULL auto_increment,
 `baneid` smallint(5) NOT NULL default '0',
 `dommerid` smallint(5) default NULL,
 `sesongid` smallint(5) NOT NULL default '0',
 `datoid` smallint(5) NOT NULL default '0',
 `tid` varchar(5) default NULL,
 `hid` smallint(5) default NULL,
 `bid` smallint(5) default NULL,
 `hmaal` char(3) default NULL,
 `bmaal` char(3) default NULL,
 PRIMARY KEY  (`kampid`)
) TYPE=MyISAM COMMENT='Kampinfo' AUTO_INCREMENT=21;

CREATE TABLE `lag` (
 `lagid` smallint(5) unsigned zerofill NOT NULL auto_increment,
 `klubbid` smallint(5) NOT NULL default '0',
 `kontaktid` smallint(5) NOT NULL default '0',
 `klasseid` smallint(5) NOT NULL default '0',
 `gruppeid` smallint(5) unsigned zerofill default NULL,
 `sesongid` smallint(5) NOT NULL default '0',
 `navn` varchar(60) NOT NULL default '',
 `melding` text,
 `betalt` char(3) default 'Nei',
 PRIMARY KEY  (`lagid`)
) TYPE=MyISAM COMMENT='Informasjon om hvert lag ligger her' AUTO_INCREMENT=226;

CREATE TABLE `klasse` (
 `klasseid` smallint(5) unsigned zerofill NOT NULL auto_increment,
 `sesongid` smallint(5) NOT NULL default '0',
 `navn` varchar(40) NOT NULL default '',
 `beskrivelse` varchar(60) NOT NULL default '',
 `avgift` smallint(4) NOT NULL default '0',
 `sluttspill` char(3) NOT NULL default 'Nei',
 PRIMARY KEY  (`klasseid`)
) TYPE=MyISAM COMMENT='Klasseinfo er her' AUTO_INCREMENT=23;

CREATE TABLE `gruppe` (
 `gruppeid` smallint(5) unsigned zerofill NOT NULL auto_increment,
 `klasseid` smallint(5) NOT NULL default '0',
 `sesongid` smallint(5) NOT NULL default '0',
 `navn` smallint(3) NOT NULL default '0',
 PRIMARY KEY  (`gruppeid`)
) TYPE=MyISAM COMMENT='Gruppeinfo her!' AUTO_INCREMENT=48;

Lenke til kommentar
Videoannonse
Annonse

Det ble veldig uoversiktelig!

Hvor skal målene oppdateres?

Hvordan skal de deles inn i klasser og grupper?

 

Det første du burde gjøre er å lage et databasekart, for å poste create tables blir mye jobb for de som skal kikke på det å ikke kjenner til forkortelsene dine eller hvordan noe henger sammen.

Lenke til kommentar

Lagene er allerede delt inn i klasser og grupper. Og jeg vil at det skal genereres en tabell for hver gruppe. Aner ikke hvordan dette kan gjøres, om jeg må opprette en tabell i databasen for dette, eller om php tar seg av hele jobben. Derfor jeg spør dere her.

Endret av remi sture
Lenke til kommentar

t2.332.jpg

Slik som dette ser kampene ut, og det er resultatet i kampen som avgjør om det blir hjemmeseier, uavgjort eller tap for lagene som spiller. Altså hvis hjemmelaget vinner 3-1, skal de få 3 poeng, samtidig som pluss-målene blir plusset på med 3 og minus-målene plusset på med 1. For bortelaget blir det det 1 mål ekstra i pluss-målene, og 3 på minus-målene. Og dette skal da til slutt sorteres etter poeng og målforskjell, og skrives ut.

Lenke til kommentar
t2.332.jpg

Slik som dette ser kampene ut, og det er resultatet i kampen som avgjør om det blir hjemmeseier, uavgjort eller tap for lagene som spiller. Altså hvis hjemmelaget vinner 3-1, skal de få 3 poeng, samtidig som pluss-målene blir plusset på med 3 og minus-målene plusset på med 1. For bortelaget blir det det 1 mål ekstra i pluss-målene, og 3 på minus-målene. Og dette skal da til slutt sorteres etter poeng og målforskjell, og skrives ut.

Om du kan kutte en del av id'ene dine kan det bli ganske mye enklere.

Strengt tatt trenger du vel ikke id til sesong, klubb med mer. Dato tabellen kuttes helt ut, sov. Ellers vil du få fryktelig mange joins/sub querys.

 

 

Edit: skriveleif

Endret av Babelfisken
Lenke til kommentar
t2.332.jpg

Slik som dette ser kampene ut, og det er resultatet i kampen som avgjør om det blir hjemmeseier, uavgjort eller tap for lagene som spiller. Altså hvis hjemmelaget vinner 3-1, skal de få 3 poeng, samtidig som pluss-målene blir plusset på med 3 og minus-målene plusset på med 1. For bortelaget blir det det 1 mål ekstra i pluss-målene, og 3 på minus-målene. Og dette skal da til slutt sorteres etter poeng og målforskjell, og skrives ut.

Skal for ordens skyld nevne at jeg er fersk på både php og mysql så overse alle sytax feil o.l.

 

Jeg tror du gjør det enklere med en litt annen struktur på kampene. Hva med å ha en kamptabell og en enklere resultattabell:

id, kampid, lag, hjemme, forlengs, baklengs, poeng

 

Denne kan du oppdatere sammtidig som du oppdaterer kamp tabellen.

Tanken er at hvert lag får sin rad.

Når resultater legges inn skulle det være enkelt nok å bygge opp to ekstra insert i php basert på de innlagte data

Del de gjerne opp i to array, en for hvert lag og legg data inn i disse.

 

$hjemme['lag']

$hjemme['forlengs]

$hjemme['baklengs']

$hjemme['poeng']

 

og tilsvarende for $borte[]

det er da poeng som må beregnes og det blir:

 

IF ($hjemme['forlengs'] > $hjemme['baklengs']) {

$hjemme['poeng'] = 3;

$borte['poeng'] = 0;

}

ELSEIF ($hjemme['forlengs'] = $hjemme['baklengs'] ) {

$hjemme['poeng'] = 1;

$borte['poeng'] = 1;

}

ELSEIF ( $hjemme['forlengs'] < $hjemme['baklengs'] ) {

$hjemme['poeng'] = 0;

$borte['poeng'] = 3;

}

 

Ved insert får da $hjemme satt kolonnen "hjemme" satt til true og false for bortelaget.

 

Kamp tabellen er fin til å liste siste rundes kamper o.l. Den nye er enkel å rapportere sammenlagtreultater med. Det blir litt dobbellagring men mye enklere håndtering.

Et select bør kunne se slik ut:

Select lag, målforskjell as ToString( sum(forlengs) . ' - ' . (sum(baklengs), poeng

Group by unikt_lag

Order by poeng desc

 

Her har jeg kuttet ut alle id for enkelhetens skyld.

Disse kan jo skape noen sub queries.

Lenke til kommentar
t2.333.jpgMå ha med både sesong, klubb og dato i kamp-tabellen. Men har fjernet det fra datamodellen for å gjøre det mer oversiktlig.

Mente ikke at du skulle fjerne det bare bruke unik informasjon som unik indentifikator. For hver gang du erstatter informasjonen du egentlig trenger med en id og du senere skal spørre på disse data må du bruke en join eller sub query.

Eks:

 

Select Hjemmelag, Bortelag, Klubb , Dommer From Kamper

Where Kamper.id = 1;

 

Her kunne antagelig all denne informasjonen ligget som:

- Primary key i de enkelte tabellenne de hører hjemme

- fordi de er primary key i de enkelte tabellene vil de også ligge som klartekt i kamper tabellen.

 

I stedet må du inn med et mye lenger querry for å hente ut data.

 

Select hjemmelag = (select navn from lag where id = kamper.hid), Bortelag = (select navn from lag where id = bid) osv.

Vet ikke en gang om det vil virke faktisk. Her er et eksempel som virker på en eksempeldatabase i MS SQL:

 

SELECT Name,

(SELECT productsubcategory.name

FROM productsubcategory

WHERE productsubcategoryid = 1) AS subcategory

FROM Product

WHERE (ProductID = 8)

 

Mulig dette kan gjøres enklere men uansett vil det jeg vil kalle unødig bruk av Id felt gi deg masse arbied. Det er ikke noe galt med å bruke slike id'er men de kan skape unødig arbied i et lite, kontrollert system. Sammtidig skal man selvsagt passe seg for ikke å begrense mulighetene ved å kutte for mye. Det kan skape begrensinger før man aner. Største ulempen med å kutte ut Id i så henseende er at man kan miste kobling til historisk informasjon om navnene endres.

Lenke til kommentar

Har nå prøvd meg litt her. Får hentet ut de lagene jeg vil, og lagt til i en array jeg har kalt $tabell.

 

Prøver så å sjekke hjemmemål og bortemål for å finne ut hvem som vinner kampen, og oppdatere variabler som jeg pusher inn i arrayet. Men hvordan kan jeg få til å oppdatere akkurat det laget som vinner kampen? Nå får alle lagene i arrayet samme verdier.

 

Her kan dere se resultatet og koden får å få dette fram:

 

http://julecupen.no/tabell.php

http://julecupen.no/tabell.phps

 

Her er kampene som ligger i databasen nå:

t2.336.jpg

Lenke til kommentar
  • 1 måned senere...

Hei igjen!

 

Nå har vi begynt å ta i bruk systemet, og jeg merker nå at det er en liten feil her. Det blir registrert kamper og uavgjort, selvom det ennå ikke er registrert noe resultat. I databasen ligger det enten "null" eller ingenting i "hmaal" og "bmaal".

 

Noen som kan hjelpe meg slik at det bare blir registrert dersom de to radene inneholder tall, altså ikke null eller er tom?

 

http://norskwebforum.no/pastebin/1390

http://julecupen.no/tabeller.php

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...