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

[PHP] data van 2 verschillende Mysql queries naar een array

Pagina: 1
Acties:

  • KC_Kaas
  • Registratie: Mei 2003
  • Niet online
Ik ben bezig met het bouwen van rapportagesysteem. Hiervoor sla ik verschillende soorten data op in een MySQL database.

Nu wil ik een grafiek genereren waarbij ik da gebruik uit 2 verschillende tabelen. Deze moeten opgeslagen worden in een array die in mee kan geven aan de class die de grafiek genereerd. De code die ik geprobeerd heb is de volgende:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
$query = "SELECT id, datum
  FROM reviews
  WHERE docentid = $docentid
  ORDER BY datum";

$result6 = mysql_query($query);

while($row6 = mysql_fetch_object($result6)) {
  print $row6->datum;
  $query = "SELECT SUM(score * weging)  / SUM(weging) AS gemiddelde
        FROM review_data LEFT JOIN review_criteria 
        ON review_data.criteria = review_criteria.id 
        WHERE review_criteria.onderdeel = $onderdeel AND review_data.review_id = $row6->id";
        
  $result = mysql_query($query);
  $row = mysql_fetch_object($result);
  $data = array_fill($i, $row6->datum, $row->gemiddelde);
  $i++;
}


Het formaat waarin de data moet komen te staan:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
//enkele grafiek
$data = array(array('', 0, 0), array('', 1, 9));
//dubbele grafiek
$example_data = array(
     array('a',3,4,2),
     array('b',5,'',1),  // here we have a missing data point, that's ok
     array('c',7,2,6),
     array('d',8,1,4),
     array('e',2,4,6),
     array('f',6,4,5),
     array('g',7,2,3)
);


Ik wil dus bijvoorbeeld de volgende array genereren
PHP:
1
2
3
4
5
6
7
8
9
$example_data = array(
     array('03-02-2010',3),
     array('01-03-2010',5,)
     array('04-04-2010',1),
     array('02-05-2010',3),
     array('01-06-2010',2),
// de eerste waarde is de datum
// de tweede waarde is het cijfer
);


Ik gebruik PHPlot om de grafiek te genereren.

Wie kan mij op weg helpen met het maken het juiste formaat array?

[ Voor 9% gewijzigd door KC_Kaas op 30-03-2011 15:56 ]


  • storeman
  • Registratie: April 2004
  • Laatst online: 26-11 12:08
Je bent aardig op weg, dit is redelijk basis php, zie hier:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php
$query = "SELECT id, datum
  FROM reviews
  WHERE docentid = $docentid
  ORDER BY datum";

$result6 = mysql_query($query);

$dataSet6 = array();
while($row6 = mysql_fetch_object($result6)) {
  print $row6->datum;
  $query = "SELECT SUM(score * weging)  / SUM(weging) AS gemiddelde
        FROM review_data LEFT JOIN review_criteria 
        ON review_data.criteria = review_criteria.id 
        WHERE review_criteria.onderdeel = $onderdeel AND review_data.review_id = $row6->id";
        
  $result = mysql_query($query);
  $row = mysql_fetch_object($result);
  
  $dataSet6[] = array( $row6->datum, $row->gemiddelde);
  $i++;
}


Het lijkt erop dat je nog niet erg thuis bent in de mogelijkheden van SQL, dus ik heb even een mooier en sneller voorbeeld in elkaar gesleuteld. (Let op je SQL, die is verre van netjes, maar MySQL slikt het wel, andere RDMS-en doen dat niet)

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
$query = "SELECT reviews.id, reviews.datum, SUM(score * weging)  / SUM(weging) AS gemiddelde
  FROM reviews
  LEFT JOIN review_data ON review_data.review_id = reviews.id
  LEFT JOIN review_criteria ON review_criteria.id = review_data.criteria
  WHERE docentid = $docentid
  GROUP BY reviews.id, reviews.datum
  ORDER BY datum ASC";

$result6 = mysql_query($query);

$dataSet6 = array();
while($row6 = mysql_fetch_object($result6)) {  
  $dataSet6[] = array( $row6->datum, $row6->gemiddelde);
  $i++;
}

"Chaos kan niet uit de hand lopen"


Verwijderd

PHP:
1
2
3
4
while($row6 = mysql_fetch_assoc($result6)) {   
  $dataSet6[] = $row6;
  $i++; 
}


Misschien handiger om van mysql-fetch_assoc gebruik te maken (just a tip), gebruik ik zelf ook altijd.

Even code tags toegevoegd ;)

[ Voor 23% gewijzigd door RobIII op 30-03-2011 23:56 ]


  • Mercatres
  • Registratie: September 2009
  • Laatst online: 12:49
En vergeet je code niet tegen SQL-injecties te beschermen ;)
Nog een tip: achter je mysql_query() zet je or die(mysql_error());

  • Schonhose
  • Registratie: April 2000
  • Laatst online: 25-11 00:08

Schonhose

Retro Icoon

Mercatres schreef op woensdag 30 maart 2011 @ 23:30:
Nog een tip: achter je mysql_query() zet je or die(mysql_error());
Om te testen misschien wel, maar zeker in productie-code zou ik de fout toch op een andere manier afvangen en presenteren dan de error van MySQL terug te geven. ;)

"The thing under my bed waiting to grab my ankle isn't real. I know that, and I also know that if I'm careful to keep my foot under the covers, it will never be able to grab my ankle." - Stephen King
Quinta: 3 januari 2005