Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

Database ontwerp

Pagina: 1
Acties:

  • Invitiom
  • Registratie: Maart 2010
  • Laatst online: 05-10-2023
Voor een verenging heb ik een website gemaakt waarmee mensen achter de bar kunnen registreren als iemand wat wilt bestellen. Aan het eind van de maand krijg je dan een totaal van wat je hebt besteld en dat wordt dan van je rekening afgeschreven.

Ook kan je hier groepen in maken zodat de kosten worden verdeeld over die mensen. ook kan je iemand twee keer aan een groep toevoegen als bijvoorbeeld iemand een vriend mee neemt die niet lid is maar wel mee drinkt.

Nu heb ik dit wel werkend gekregen maar volgens mij is dit niet de beste manier, dit is wat ik nu heb:

Members
id
naam
isgroup

Groupmembers
id
groupid -> members.id fk
memberid -> members.id fk

Orders
id
memberid
productid
amount
date

sql code om de totalen te bereken voor alle leden
SQL:
1
2
3
4
5
6
7
8
SELECT  m.id, m.Name, p.name, count(p.name), sum(p.price)
FROM    members         as m
,       orders      as  o
,       products    as p
WHERE   m.Id        = o.MemberId
AND     o.ProductId = p.Id
AND     m.IsGroup = 0
GROUP BY m.id, p.Name


code die ik nu heb om de prijs per persoon uit rekenen:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
$groups = $this->get_total_price_per_member(true); // hier krijg het totale bedrag aan wat er is besteld per groep
        $total_members = $this->get_total_groupmembers(); // het totaal aantal deelnemers per groep
        $total_groupmembers_per_member = $this->get_total_groupmembers_per_member(); // hoevaak iemand in een groep is ingeschreven.
        $priceperperson = array();
        $result = array();
        for ($i=0; $i < count($groups); $i++)
        {
            $priceperperson[$i][0] = $groups[$i]['Name'];
            $priceperperson[$i][1] = $groups[$i]['id'];
            $priceperperson[$i][2] = $groups[$i]['sum(p.price)'] / $total_members[$i]['count(gm.memberId)'];
        }
        for ($i=0; $i < count($total_groupmembers_per_member); $i++)
        {
            for($x=0; $x < count($priceperperson); $x++)
            {
                if($priceperperson[$x][1] == $total_groupmembers_per_member[$i]['id'])
                {
                    $result[$i][0] = $priceperperson[$x][0];
                    $result[$i][1] = $total_groupmembers_per_member[$i]['memberId'];
                    $result[$i][2] = $total_groupmembers_per_member[$i]['count(gm.memberId)'] *  $priceperperson[$x][2];
                    break;
                }
            }
        }
        
        for($i=0; $i < count($result); $i++)
        {
            echo ' Member: ' . $result[$i][1] . 'Spel: ' . $result[$i][0] .  ' Price: ' . $result[$i][2] . ' </br>';
        }



Volgens mij is dit heel omslachtig, iemand tips hoe ik dit anders kan doen?

  • kwaakvaak_v2
  • Registratie: Juni 2009
  • Laatst online: 10-10 08:02
joins of sub select en een group by zouden ook moeten kunnen volgens mij.

Driving a cadillac in a fool's parade.


  • HollowGamer
  • Registratie: Februari 2009
  • Niet online
Al eens naar PDO fetchAll gekeken? ;)

Sowieso zou je eens moeten kijken naar de array functies die PHP allemaal heeft. Zo kun je inderdaad korter door een lijst heen gaan. Op zich is de code niet slecht, maar korter is (meestal) beter. :)

Het is trouwens ook niet erg om meerdere selects te doen, wat kwaakvaak_v2 voorstelt. Maakt het voor jezelf ook wat makkelijker en overzichtelijker.

[ Voor 82% gewijzigd door HollowGamer op 05-11-2014 23:12 ]