login  Naam:   Wachtwoord: 
Registreer je!
 Forum

Probleem met Array (Opgelost)

Offline webkeen - 19/04/2008 00:22 (laatste wijziging 19/04/2008 00:23)
Avatar van webkeenNieuw lid Ik gebruik het onderstaande script:

  1. $array = array();
  2. $fin_q = mysql_query("SELECT Datum, DATE_FORMAT(datum, '%d-%m-%Y') AS Datum2, Bedrag, BTW FROM financieel WHERE YEAR(datum) = $filterjaar AND QUARTER(Datum) = $filterkwartaal") or die(mysql_error());
  3. while($fin = mysql_fetch_object($fin_q)){
  4. $array[] = $fin->ID ."|". round(str_replace(",", ".", $fin->Bedrag), 2);
  5. }
  6.  
  7.  
  8.  
  9.  
  10. for
  11.  
  12. ($index=1; $index <= sizeof($array) - 1; $index++){
  13. $los = explode("|", $array[$index]);
  14. }



De bedoeling is dat hij de getallen van round(str_replace(",", ".", $fin->Bedrag), 2) , de waarde hiervan zijn: Array ( [0] => |3233 [1] => |1222 ) .
Alleen zoals je al ziet heb ik te maken met een lelijke pipe en de getallen worden niet opgeteld. Wat doe ik hierboven verkeerd. Iemand een oplossing? De | tussen de array heb ik al een keer weggedaan, maar dit werkt niet. Net zoals na de waarde explode.

Alvast bedankt.

14 antwoorden

Gesponsorde links
Offline Stijn - 19/04/2008 00:39
Avatar van Stijn PHP expert
Citaat:
De bedoeling is dat hij de getallen van round(str_replace(",", ".", $fin->Bedrag), 2) , de waarde hiervan zijn: Array ( [0] => |3233 [1] => |1222 ) .
Wat is de bedoeling? Je zegt dat hij ze niet optelt, maar ik zie nergens een som staan in je code.

Op lijn 4 van je code zet je $fin->ID terwijl je de ID kolom niet selecteert in je query. Dus is het totaal nutteloos wat je daar doet.

Formuleer je probleem nogmaals en deze keer in een leesbare, nederlandstalige zin.
Offline Kr4nKz1n - 19/04/2008 09:17
Avatar van Kr4nKz1n Onbekend Even nog een tip

  1. ($index=1; $index <= sizeof($array) - 1; $index++)


Je zegt dat die door moet gaan zoalng die kleiner is of gelijk aan is. En dan haal je er 1 af bij het aantal in de array.

Als je nou gewoon zo doet
  1. ($index=1; $index < sizeof($array); $index++)


Gewoon doorgaan zolang die kleiner is, zonder = en zonder -1.

Daarnaast ga ik met stijn mee Ik snap er niks van. Je maakt je eerste zin niet af.
[i]De bedoeling is dat hij de getallen van functie..blabla
En dat is het 

Ik neem aan dat je alles wilt optellen per ID, als ik het goed begrijp.

Lang leve MySQL met de functie SUM() en GROUP BY.
  1. $qSelect = Mysql_Query('SELECT SUM(Bedrag) FROM financieel GROUP BY id');
Offline webkeen - 19/04/2008 10:23
Avatar van webkeen Nieuw lid Ja, de bedoeling is om de som bij elkaar op te tellen.

Ik heb deze geprobeerd:
  1. $qSelect = Mysql_Query('SELECT SUM(Bedrag) FROM financieel GROUP BY id');


Deze ziet er bij mij als volgt uit:

  1. $fin_q = mysql_query("SELECT Datum, DATE_FORMAT(datum, '%d-%m-%Y') AS Datum2, SUM(bedrag), BTW FROM financieel WHERE YEAR(datum) = $filterjaar AND QUARTER(Datum) = $filterkwartaal GROUP BY id") or die(mysql_error());
Offline webkeen - 19/04/2008 10:23 (laatste wijziging 19/04/2008 10:26)
Avatar van webkeen Nieuw lid Ja, de bedoeling is om het tabel bedrag bij elkaar op te tellen.

Ik heb deze geprobeerd:
  1. $qSelect = Mysql_Query('SELECT SUM(Bedrag) FROM financieel GROUP BY id');


Deze ziet er bij mij als volgt uit:

  1. $fin_q = mysql_query("SELECT Datum, DATE_FORMAT(datum, '%d-%m-%Y') AS Datum2, SUM(bedrag), BTW FROM financieel WHERE YEAR(datum) = $filterjaar AND QUARTER(Datum) = $filterkwartaal GROUP BY id") or die(mysql_error());


Alleen nu krijg ik de waarde Array ( [0] => |0 [1] => |0 )

Er gaat iets mis in de for lus waardoor de som niet goed gaat en waardoor ik een extra | voor elke getallen krijg. Deze moet weg anders wordt het niet opgeteld. Maar ik weet niet hoe. Iemand een idee??? 



Offline Kr4nKz1n - 19/04/2008 10:24
Avatar van Kr4nKz1n Onbekend Je moet even AS gebruiken.
SUM(Bedrag) AS Totalbedrag

Dan kun je deze aanroepen met die naam.
Offline webkeen - 19/04/2008 10:28
Avatar van webkeen Nieuw lid
Kr4nKz1n schreef:
Je moet even AS gebruiken.
SUM(Bedrag) AS Totalbedrag

Dan kun je deze aanroepen met die naam.



Gedaan, nu krijg ik wel de goede waardes hiervoor alleen weer met een | ervoor:

Array ( [0] => |1222 [1] => |3233 )
Offline Kr4nKz1n - 19/04/2008 10:30
Avatar van Kr4nKz1n Onbekend
  1. $array[] = $fin->ID ."|". round(str_replace(",", ".", $fin->Bedrag), 2);


Die zet je er zelf voor.
Je haalt ID namelijk niet op dus staat die | er alleen.
Offline webkeen - 19/04/2008 10:42
Avatar van webkeen Nieuw lid
Kr4nKz1n schreef:
[..code..]

Die zet je er zelf voor.
Je haalt ID namelijk niet op dus staat die | er alleen.


Maar als ik die weghaal doet hij het volgende:

Array ( [0] => 1222 [1] => 3233 )

Alleen hij telt het bedrag nog niet op. Waar kan dit aan liggen?

Mijn array ziet er nu zo ui:

  1. $array[] = $fin->ID ." ". round(str_replace(",", ".", $fin->Bedrag2), 2);
Offline Kr4nKz1n - 19/04/2008 10:49
Avatar van Kr4nKz1n Onbekend Hmmz dom natuurlijk 

Van wat moet hij de Bedragen bij elkaar optellen, van alles?

Dan even geen GROUP BY.
Offline webkeen - 19/04/2008 12:55 (laatste wijziging 19/04/2008 13:01)
Avatar van webkeen Nieuw lid
Kr4nKz1n schreef:
Hmmz dom natuurlijk 

Van wat moet hij de Bedragen bij elkaar optellen, van alles?

Dan even geen GROUP BY.


De bedragen die hij moet optellen staan in de kolom "Bedrag".
Deze moeten bij elkaar opgeteld worden.

Wanneer ik geen GROUP BY doe dan krijg ik deze foutmelding:

Mixing of GROUP columns (MIN(),MAX(),COUNT(),...) with no GROUP columns is illegal if there is no GROUP BY clause

Ik heb ook al GROUP BY Bedrag gedaan maar dit maakt ook niets uit.

Offline Kr4nKz1n - 19/04/2008 13:11
Avatar van Kr4nKz1n Onbekend GROUP BY wil zeggen dat hij al die bedragen in Bedrag van dat veld bij elkaar optelt.

Dus alle ID`s die gelijk aan elkaar zijn (elk id is al uniek).
Offline webkeen - 19/04/2008 13:28 (laatste wijziging 19/04/2008 13:51)
Avatar van webkeen Nieuw lid Dit is nu de code wat ik heb staan:

  1. $array = array();
  2. $fin_q = mysql_query("SELECT Datum, DATE_FORMAT(datum, '%d-%m-%Y') AS Datum2, SUM(bedrag) AS Bedrag2, BTW FROM financieel WHERE YEAR(datum) = $filterjaar AND QUARTER(Datum) = $filterkwartaal GROUP BY ID") or die(mysql_error());
  3. while($fin = mysql_fetch_object($fin_q)){
  4. $array[] = $fin->ID ." ". round(str_replace(",", ".", $fin->Bedrag2), 2);
  5. }
  6. for ($index=1; $index < sizeof($array); $index++){
  7. $los = explode("|", $array[$index]);
  8. print_r($array);
  9. }


Nog steeds krijg ik deze waarde tevoorschijn omdat ik gebruik maak van print_r($array);.

Array ( [0] => 1222 [1] => 3233 )

Dit is opzich volgens mij niet verkeerd. Alleen wanneer ik in het overzicht kijk waar deze waardes moeten worden weergegeven worden zie ik 0,00 ipv 4455,00.

In het overzicht gebruik ik trouwens dit commando om de waarde te laten zien van de array: ". mkBedrag($los[2]) ."

Zit hier misschien de fout in. Misschien dat de array zich nu niet verdeeld?



Offline Wim - 19/04/2008 14:35 (laatste wijziging 19/04/2008 14:35)
Avatar van Wim Crew algemeen
Kr4nKz1n schreef:
GROUP BY wil zeggen dat hij al die bedragen in Bedrag van dat veld bij elkaar optelt.

Dus alle ID`s die gelijk aan elkaar zijn (elk id is al uniek).


dat eerste versta ik meer zoals SUM eigenlijk...

groeperen is niet optellen... je zorgt er gewoon voor dat elke waarde maar 1x voorkomt :-)
Offline webkeen - 19/04/2008 14:37 (laatste wijziging 19/04/2008 15:44)
Avatar van webkeen Nieuw lid
wimmarien schreef:
[..quote..]

dat eerste versta ik meer zoals SUM eigenlijk...

groeperen is niet optellen... je zorgt er gewoon voor dat elke waarde maar 1x voorkomt :-)


De oplossing kwam ik achter toen ik deze reactie zag. Toen heb ik GROUP BY veranderd in GROUP BY QUARTER(datum). Wanneer je sorteert op ID pakt hij maar 1 waarde en telt hij niets op. Mede dankzij deze website kwam ik erachter. Alvast bedankt voor jullie reacties.
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.292s