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

[PHP] Loop door result set

Pagina: 1
Acties:

  • We Are Borg
  • Registratie: April 2000
  • Laatst online: 23:38

We Are Borg

Moderator Wonen & Mobiliteit / General Chat
Topicstarter
Een hoop gehad aan het leesvoer uit de FAQ om te begrijpen hoe een groupby nu echt werkt :)

Programming FAQ - SQL

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
    $sql =  "
                SELECT
                        dt_customertypes.TypeName, dt_salesstatus.StatusDescription, SUM(dt_sales.Turnover)
                FROM
                        dt_sales
                LEFT JOIN
                        dt_salesstatus
                ON
                        dt_sales.StatusID = dt_salesstatus.StatusID
                LEFT JOIN
                        dt_customers
                ON
                        dt_sales.CustomerID = dt_customers.CustomerID
                LEFT JOIN
                        dt_customertypes
                ON
                        dt_customers.CustomerTypeID = dt_customertypes.CustomerTypeID
                GROUP BY
                        dt_salesstatus.StatusDescription, dt_customertypes.TypeName

                ";
Daaruit heb ik deze SQL gemaakt (volgens mij op de manier waarop group by moet werken), die het volgende tabelletje uitspuugt:

Afbeeldingslocatie: http://tweakers.net/ext/f/46CH6tC5N4EnssAOcinubnI1/medium.png

Die code, wil ik vervolgens in het volgende ouput format krijgen (voor een highchart):

JavaScript:
1
2
3
4
5
6
7
8
9
10
11
                    name: 'Lost',
                    data: [7777]
                }, {
                    name: 'Negotation',
                    data: [0, 15000]
                }, {
                    name: 'Proposal',
                    data: [185000]
                }, {
                    name: 'Sold',
                    data: [143500, 9]


Nu probeer ik via een while($row = mysqli_fetch_array($result) hier doorheen te loopen, maar ik loop tegen problemen aan:

Voor elke name (bijv sold) is zowel de volgorde als daadwerkelijk resultaat belangrijk. Zowel customer als prospect heeft een sold value, dus in volgorde wil ik deze 2 loopen. Maar als prospect, die na customer komt qua sortingsvolgorde, een negotation waarde heeft, maar customer niet, moet customer eerst een nul waarde krijgen. Anders klopt de grafiek output niet.

Nu loop ik compleet vast met mijn ondertussen nested while loopjes, maar ik vermoed dat ik aan het begin al iets verkeerd aanpak (mijn query) en dat ik nooit met deze query de correcte formating ga krijgen.

Waar ik tot nu toe mee bezig was qua loop:

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
while ($row = mysqli_fetch_array( $Segments)){
//$Segments bevat, in dit voorbeeld, de 2 unieke segmenten, customers en prospects. Dit heb ik (volgens mijn logica :P ) nodig om 2 keer door de segmenten te loopen

    while ($row = mysqli_fetch_array( $SalesStatus)){


        if (empty($LastStatus) OR $LastStatus != $row['StatusDescription']) {
            echo 'name: \''.$row['StatusDescription'].'\', ';
        }

        echo '<br>';
        if (empty($LastStatus) OR $LastStatus != $row['StatusDescription']) {

            echo 'data: [';
        }
        echo $row[2];
        if (empty($LastStatus) OR $LastStatus != $row['StatusDescription']) {

            echo '] ';
        }
        echo '<br>';
        if (empty($LastStatus) OR $LastStatus != $row['StatusDescription']) {

            echo '}, {';
        }
        echo '<br>';
        $LastStatus = $row['StatusDescription'];

    }


}


Output

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
name: 'Lost',
data: [7777]
}, {
name: 'Negotiation',
data: [15000]
}, {
name: 'Proposal',
data: [185000]
}, {
name: 'Sold',
data: [143500]
}, {

9



Kan iemand mij een tip geven hoe ik dit het beste kan aanpakken :) ?

  • We Are Borg
  • Registratie: April 2000
  • Laatst online: 23:38

We Are Borg

Moderator Wonen & Mobiliteit / General Chat
Topicstarter
Niemand een suggestie :) ?

  • GlowMouse
  • Registratie: November 2002
  • Niet online
Vervang regel 5 t/m 32 door:
PHP:
1
$out[ $row['StatusDescription'] ][ $row['TypeName'] ] = $row['SUM(dt_sales.Turnover)'];

En probeer dan via $out de output te maken.

  • BasieP
  • Registratie: Oktober 2000
  • Laatst online: 19-10 08:18
even voor de goede orde:
wat jij aan output gegenereerd lijkt op json. Is het de bedoeling dat het JSON is?

lees dan even de specs door op: http://json.org/
(vooral iets met quotes)

This message was sent on 100% recyclable electrons.


  • curvemod
  • Registratie: Maart 2009
  • Laatst online: 15-11 23:31
BasieP schreef op maandag 10 december 2012 @ 22:54:
even voor de goede orde:
wat jij aan output gegenereerd lijkt op json. Is het de bedoeling dat het JSON is?

lees dan even de specs door op: http://json.org/
(vooral iets met quotes)
BasieP schreef op maandag 10 december 2012 @ 22:54:
even voor de goede orde:
wat jij aan output gegenereerd lijkt op json. Is het de bedoeling dat het JSON is?

lees dan even de specs door op: http://json.org/
(vooral iets met quotes)
Mee eens, en kijk dan meteen even op PHP.net naar de json_encode() methode, als je daar een array in prakt heb je meteen de goede output. Dus bv

code:
1
2
3
4
$output = []; //Short syntax voor array
$output['name'] = $row['databaseResultColumn'];

echo json_encode($output);

  • We Are Borg
  • Registratie: April 2000
  • Laatst online: 23:38

We Are Borg

Moderator Wonen & Mobiliteit / General Chat
Topicstarter
BasieP schreef op maandag 10 december 2012 @ 22:54:
even voor de goede orde:
wat jij aan output gegenereerd lijkt op json. Is het de bedoeling dat het JSON is?

lees dan even de specs door op: http://json.org/
(vooral iets met quotes)
Ah kijk dat wist ik niet. Nu weet ik waarop ik kan zoeken. Want het is inderdaad json. Dank allen voor de input, dat was het duwtje, ik ga lezen en zelf proberen :)

  • Tsjilp
  • Registratie: November 2002
  • Niet online

Tsjilp

RS[I]ds

PHP:
1
2
3
4
while ($row = mysqli_fetch_array( $Segments)){ 
//$Segments bevat, in dit voorbeeld, de 2 unieke segmenten, customers en prospects. Dit heb ik (volgens mijn logica :P ) nodig om 2 keer door de segmenten te loopen 

    while ($row = mysqli_fetch_array( $SalesStatus)){

In je binnenste loop overschrijf je de variable $row van de buitenste loop, lijkt me niet de bedoeling.
Bovendien: Als je een json object wil maken, kun je dan niet beter een php array / object maken en deze aan het eind met json_encode() omzetten naar een json object? Handelt alle quotes e.d. voor je af.

Raar... Is zo gek nog niet

Pagina: 1