Elke row in 1 week, per dag van MySQL database? Kan dit?

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • keejoz
  • Registratie: November 2008
  • Laatst online: 28-08 15:53
Voor een website waar elke dag 4 menu's (4 soorten) te koop zijn heb ik dit per menu in de database gestopt.
Dus elke row heeft een categorie (1 van de 4 menu's), een datum en de rest vd info (prijs, naam, etc).

De ontwerper van de website heeft de menus per dag in 1 blok gezet waardoor ik niet zo simpel even kan foreach'en.

De oplossingen:

1. in PHP eerst alle gegevens ordenen op datum
2. een betere MySQL query schrijven die alles per datum teruggeeft (in 1 query als dit kan? Liefst geen 5x voor elke dag)


Ik wou voor de 2de oplossing gaan, maar kan dit wel? Mijn google-fu en kennissen wisten het niet.

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Wat lukt er niet aan een select... Where somedate = '2011-01-30' of select... Where weeknr = 5 :? Een order by...-clause erop et voila. Dit is toch wel basiskennis SQL.

[ Voor 13% gewijzigd door RobIII op 30-01-2012 09:21 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • Joolee
  • Registratie: Juni 2005
  • Niet online
Maak eens een tabelletje van hoe het is en zoals jij het zou willen zien, ik kan er nu geen touw aan vast knopen.

Acties:
  • 0 Henk 'm!

  • keejoz
  • Registratie: November 2008
  • Laatst online: 28-08 15:53
RobIII schreef op maandag 30 januari 2012 @ 09:18:
Wat lukt er niet aan een select... Where somedate = '2011-01-30' of select... Where weeknr = 5 :? Een order by...-clause erop et voila. Dit is toch wel basiskennis SQL.
Ik gebruik nu een BETWEEN om weken te checken, maar dit levert enkel rows op per datum.

Output is bv:

01-01-1970 - Vis in saus - rij 1
01-01-1970 - Worst rij 2
01-01-1970 - Tomatensoep rij 3
02-01-1970 - etc rij 4
02-01-1970 - etc rij 5

De output op de webpagina hoort er zo uit te zien:

01-01-1970
rij 1 Vis in Saus
rij 2 Worst
rij 3 Tomatensoep

02-01-1970
rij 4 idem
rij 5 idem...


Hoop dat ik zo wat duidelijker was, ben namelijk al een hele nacht op 8)7

Acties:
  • 0 Henk 'm!

  • P_de_B
  • Registratie: Juli 2003
  • Niet online
De ontwerper van de website heeft de menus per dag in 1 blok gezet waardoor ik niet zo simpel even kan foreach'en.
Dit snap ik niet helemaal? Dit is iets wat je normaliter wel in je presentatielaag oplost en niet in een query. Waarom zou je niet een foreach kunnen doen?

Oops! Google Chrome could not find www.rijks%20museum.nl


Acties:
  • 0 Henk 'm!

  • keejoz
  • Registratie: November 2008
  • Laatst online: 28-08 15:53
Het leek me vreemd om in mijn viewer de array opnieuw aan te maken en opnieuw door te lopen...

Acties:
  • 0 Henk 'm!

  • Cartman!
  • Registratie: April 2000
  • Niet online
Hak het eerst op in stukken, eerst haal je de juiste rijen op en daarna ga je in je presentatielaag dus de content weergeven zoals jij wilt. De gegevens ophalen zoals je het gaat weergeven ga je niet willen doen :)

Acties:
  • 0 Henk 'm!

  • Joolee
  • Registratie: Juni 2005
  • Niet online
Wat ik meestal doe is zoiets:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
$lastDate = null;

// start loop

if($lastDate != $databaseDate) {
    if(!isnull($lastDate)) {
        // Sluit oud blok
    }
    // Toon blok Header
}

// Toon rij

// Eind loop

if(!isnull($lastDate))
   // Sluit oud blok

Je kunt deze structuur natuurlijk ook gebruiken om een nieuwe array in te richten waar je wel netjes doorheen kunt loopen. Dat is wat netter :P

[ Voor 25% gewijzigd door BtM909 op 01-02-2012 15:47 ]


Acties:
  • 0 Henk 'm!

  • chime
  • Registratie: Januari 2005
  • Laatst online: 09-09 12:46
Dat los je inderdaad gewoon in de presentatielaag op.

Alles in 1 rij gaat veel lastiger zijn ... want er zijn dagen dat er 5 items in de menu zijn, andere dagen 3, dan weer 2, dan weer 6 ...
Kortom: je gaat dan ook weer een lus nodig hebben + je DB query is veel minder performant omdat je DB ook wat meer werk heeft.

Acties:
  • 0 Henk 'm!

  • keejoz
  • Registratie: November 2008
  • Laatst online: 28-08 15:53
Ik heb net ff een break genomen en het hoofd leeg gemaakt. Ik kom terug en ik schrijf in 1 keer dit:

PHP:
1
2
3
4
5
6
    $ordenedMenu = array();
    foreach($menu as $item) {
        $ordenedMenu[$item['showdate']][] = $item;
    }
    
    print_r($ordenedMenu); ?>


en dit geeft gewoon de goede output:

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
30
31
32
33
34
35
36
37
38
Array
(
    [01/02/12] => Array
        (
            [0] => Array
                (
                    [id] => 1
                    [categorie] => 1
                    [prijs] => 6.00
                    [beschrijving] => Toscaanse Forel
                    [showdate] => 01/02/12
                )

            [1] => Array
                (
                    [id] => 2
                    [categorie] => 2
                    [prijs] => 5.95
                    [beschrijving] => Varkenssaté
                    [showdate] => 01/02/12
                )

        )

    [02/02/12] => Array
        (
            [0] => Array
                (
                    [id] => 3
                    [categorie] => 3
                    [prijs] => 4.35
                    [beschrijving] => Egelsoep
                    [showdate] => 02/02/12
                )

        )

)


Dit is dus inderdaad een oplossing in de viewer, ik weet niet wat ik aan het denken was

[ Voor 3% gewijzigd door BtM909 op 01-02-2012 16:07 ]


Acties:
  • 0 Henk 'm!

  • wjzijderveld
  • Registratie: Augustus 2005
  • Laatst online: 23-08 10:55
De les die je geleerd hebt: Gewoon gaan slapen als je moe bent :P

Canon EOS60D | Canon 100mm f/2.8 USM | Canon 100-400mm f/4.5-5-6L | Canon 10-22mm f/3.5-4.5 USM | Canon 430EX II

Pagina: 1