Just nu i M3-nätverket
Gå till innehåll

SQl till $vLabels = array('Jan','Feb');


menJada1

Rekommendera Poster

Har nu letat på alla forum inklusive denna. Lag inlägg på en befinlig tråd men inte hittat något svar. Är desperat behov av hjälp.

 

Skall använda mig av ett diagram script men skall få datan hämtad från en databas. problemet är att variablen ser ut som fäljande

 

$vLabels = [color="#0000ff"]array[/color]('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec');

 

Kan nogon assistera mig i detta problem. Mina kunskaper är lagom men denna lilla nöt knäcker jag inte.

 

Scriptet i sin helhet.

 

$vCht4 = [color="#0000ff"]array[/color](5,7,3,15,7,8,2,2,2,11,22,3);
$vLabels = [color="#0000ff"]array[/color]('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec');

$ochart = [color="#0000ff"]new[/color] chart(500,260,10, '[color="#006400"]#eeeeee');[/color]
$ochart->setTitle("Results Chart","[color="#006400"]#000000",7);[/color]
$ochart->setPlotArea(SOLID,"[color="#006400"]#444444", '#dddddd');[/color]
$ochart->setFormat(0,',','.');
$ochart->addSeries($vCht4,'line','Results', SOLID,'[color="#006400"]#000000', '#0000ff');[/color]
$ochart->setXAxis('[color="#006400"]#000000', SOLID, 5, "Results");[/color]
$ochart->setYAxis('[color="#006400"]#000000', SOLID, 2, "");[/color]
$ochart->setLabels($vLabels, '[color="#006400"]#000000', 1, VERTICAL);[/color]
$ochart->setGrid("[color="#006400"]#bbbbbb", DASHED, "#bbbbbb", DOTTED); [/color]
$ochart->plot('');

 

Länk till kommentar
Dela på andra webbplatser

Givetvis, men frågan är inga problem hur får jag ut så att den fråge varibaln blir som följande.

 

$vCht4 = [color="#0000ff"]array[/color](5,7,3,15,7,8,2,2,2,11,22,3);

 

Det rä det som är kruxet

 

Länk till kommentar
Dela på andra webbplatser

Givetvis, men frågan är inga problem

Jag tror du missuppfattade Anjuna Moon. Om någon ska kunna svara på din fråga skulle det underlätta om du ställer den. Vad var det du ville att vi skulle hjälpa dig med?

 

Länk till kommentar
Dela på andra webbplatser

Anjuna Moon

Ok ,du vill ha ut ditt recordset som en array? Använd ADO's .GetRows så fixar du biffen.

 

Länk till kommentar
Dela på andra webbplatser

Ok det tackar jag för men hur skulle det se ut. Har provat allt men får inte fram någon data. Så jag misstänker att jag gör något kopiöst fel.

 

Hittade detta förslag men det funkade ju givetvis inte

 

$query4 = [color="#ff0000"]mysql_query[/color]("SELECT data FROM tabell WHERE ID = '14'");
[color="#0000ff"]while[/color]($row = mysql_fetch_[color="#0000ff"]array[/color]($query4, MYSQL_ASSOC)) {
$vCht4[] = [color="#ff0000"]number_format[/color]($row[impressions], 0, '.', '');

 

[inlägget ändrat 2004-07-07 23:14:02 av menJada]

Länk till kommentar
Dela på andra webbplatser

Anjuna Moon

Kan inte säga hur syntaxen ser ut i PHP, men när du öppnat ditt recordset så ger arrRecords=RecSet.GetRows() en x-dimensionell array där första dimensionen är radnummer och andra kolumnnumret. Dvs, arrRecords(0)(0) första kolumnen i första raden, arrRecords(3)(5) 6:e kolumnen i 4:e raden.

 

Länk till kommentar
Dela på andra webbplatser

Det där var mycket överkurs för mig. Men jag gillade X-Dimensionell array. Jag får klura lite till

 

Länk till kommentar
Dela på andra webbplatser

Anjuna Moon
Det där var mycket överkurs för mig.

 

Om du har lärt dig tänket kring recordsets så är det inte så komplicerat. Se följande resultat från en påhittad query, från en tabell med två kolumner:

 

Kol1 Kol2

----- -----

1 a

2 b

3 c

 

Rad 1 innehåller 2 kolumner. Kolumn 1 innehåller värdet "1" och kolumn 2 innehåller värdet "a"

 

Detta mostvarar i den flerdimensionella arrayen arr(0)(0) och arr(0)(1)

Den första parentesens värde är alltså radnumret minus 1. Den andra parentesen innehåller kolumnnumret minus 1

 

Kolumnnummer avgörs hur du skriver din SQL-fråga:

SELECT Kol1, Kol2 .... osv.

ger att Kol1 blir första kolumnen (i arrayen med värdet 0 enligt ovan) och Kol2 blir andra kolumnen osv.

 

Hoppas det hjälpte lite mer.

 

AnjunaMoon

____________________________________________________________

/* There is nothing more permanent than a temporary solution... */

 

Länk till kommentar
Dela på andra webbplatser

Om jag nu förstått det hela rätt och fortsätter på Anjuna Moons inlägg.

 

om 'data' i din query bara innehåller 1 värde och du använder MYSQL_ASSOC så ser varje rad i ditt svar ut som så här: array(label->data) och följdaktligen blir $vCht4 som följer:

 

array(array(label=>data),array(label=>data), ...)

 

för att nå t ex första 'data' värdet måste du ange det som:

 

$vCht4[0][label] == data

 

och för att löpa igenom och hämta alla data nåt sånt här:

 

foreach($vCht4 as $label=>$data) {

// vad du nu ska göra med $data

}

 

Länk till kommentar
Dela på andra webbplatser

Diagram scriptet gör en foreach på varabeln

 

$vCht4 = array(5,7,3,15,7,8,2,2,2,11,22,3);

 

Jag har fått felmeddelanden när jag försökt att lösa detta själv dock utan resultat. Men som du beskriver det så blir det ju 2st värden. Jag vill bara ha in ett värde från flera rader efter varandra som ovan.

 

Och jag fattar forfarande inte. Vilket jag är hemst ledsen för.

 

Och MYSQL_ASSOC är jag inte ens säker på om jag skall använda. Hittade en lösning från annat forum som jag inte lyckades få igång

 

Detta är vad jag vill göra:

 

$query4 = [color="#ff0000"]mysql_query[/color]("SELECT [color="#ff0000"]date[/color] FROM statistik ORDER BY [color="#ff0000"]date[/color] DESC");
[color="#0000ff"]while[/color]($row = mysql_fetch_[color="#0000ff"]array[/color]($query4))
{

$vLabels = [color="#0000ff"]array[/color]($row[dates]);
}

Och jag vill få datan att bli

$vLabels = [color="#0000ff"]array[/color](5,7,3,15,7,8,2,2,2,11,22,3);

 

Sedan som sagt gör scriptet en foreach och populerar digrammet med Labels.

 

??????????????????????????????

Vad göra, fattar ingen ting och det är säker det lättaste i världen :(

 

/JB

 

[inlägget ändrat 2004-07-08 21:45:51 av menJada]

Länk till kommentar
Dela på andra webbplatser

Okidoki, såg att jag skrivit lite knas i mitt förra inlägg åxå. Men den kod du postade nu ska nog gå att fixa till:

$query4 = [color="#ff0000"]mysql_query[/color]("SELECT [color="#ff0000"]date[/color] FROM statistik ORDER BY [color="#ff0000"]date[/color] DESC");
[color="#0000ff"]while[/color]($row = mysql_fetch_[color="#0000ff"]array[/color]($query4))
{

$vLabels[] = [color="#0000ff"]array[/color]($row[[color="#ff0000"]date[/color]]);
}

 

Det som är ändrat är [parentesen] efter vLabels som gör att värdena sparas ackumulerat i vLabels och får ett numeriskt index. Det andra är att jag ändrade $row[dates] till $row[date] (Om det är så att du klistrat in koden rätt av från ditt script så har $vLabels varit tom, om det är så att du har skrivit 'date' i scriptet har $vLabels bara innehållit värdet array(3) när du kommit till slutet av while-loopen.

 

 

Och då ska till slut bli:

 

$vLabels = array(5,7,3,15,7,8,2,2,2,11,22,3);

 

(Hoppas jag)

 

Länk till kommentar
Dela på andra webbplatser

Tack, du är en klippa! Nu fungerar bilden i alla fall. Men det står ARRAY i istället för som det skall vara datum??

 

[color="#ff0000"]header[/color]("Content-Type: image/png");
[color="#0000ff"]require[/color]("./panachart.[color="#0000ff"]php[/color]");

[color="#0000ff"]include[/color]("variablar.[color="#0000ff"]php[/color]");
    $query4 = [color="#ff0000"]mysql_query[/color]("SELECT [color="#ff0000"]date[/color] FROM statistik WHERE campagnID = 14 ORDER BY [color="#ff0000"]date[/color] DESC LIMIT 10");
    [color="#0000ff"]while[/color]($row = mysql_fetch_[color="#0000ff"]array[/color]($query4)){

    $vLabels[] = [color="#0000ff"]array[/color]($row[[color="#ff0000"]date[/color]]);
}
   	$vCht4 = [color="#0000ff"]array[/color](1,2,3,4,5,6);

$ochart = [color="#0000ff"]new[/color] chart(450,130,5, '[color="#006400"]#eeeeee');[/color]
$ochart->setTitle("AVAd Stats","[color="#006400"]#000000",2);[/color]
$ochart->setPlotArea(SOLID,"[color="#006400"]#444444", '#dddddd');[/color]
$ochart->setFormat(0,',','.');
$ochart->addSeries($vCht4,'line','Series1', SOLID,'[color="#006400"]#FF0000', '#FF0000');[/color]
$ochart->setYAxis('[color="#006400"]#000000', SOLID, 2, "");[/color]
$ochart->setLabels($vLabels, '[color="#006400"]#000000', 1, VERTICAL);[/color]
$ochart->setGrid("[color="#006400"]#bbbbbb", DASHED, "#bbbbbb", DOTTED);		[/color]
$ochart->plot('');

 

Länk till kommentar
Dela på andra webbplatser

Lätt fixat.

 

Raden:

$vLabels[] = array($row[date]);

ändrar du till:

$vLabels[] = $row[date];

 

Så ska det funka! (Jag håller tummarna för det i alla fall)

 

Länk till kommentar
Dela på andra webbplatser

TACK!!!!!!!!!!!!!!!!!!!

 

Du är en klippa men det är riktigt pinsamt att jag strandat på detta.

Har hållit på ett tag med detta men fått tunnelseende.

 

Än en gång TACK!

 

/JB

 

Länk till kommentar
Dela på andra webbplatser

Vet inte om jag måste byta tråd men jag har en LIMIT fråga som inte vill bli rätt.

 

/JB

 

Länk till kommentar
Dela på andra webbplatser

Anjuna Moon
Tack själv för poängen :)

 

Det var jag som gav dig poängen =)

Tyckte du hade lagt så mkt tid på tråden att du var värd ett par poäng.

 

Länk till kommentar
Dela på andra webbplatser

  • 2 veckor senare...

Godag nu var man här igen och strular till det för omvärlden.

Fler array problem.

 

Nu vill jag göra en beräkning av sql resultat och få in det i en ny array, men får som vanligt fel.

 

Detta har jag lyckats med:

 

$query4 = [color="#ff0000"]mysql_query[/color]("SELECT SUM(impressions) [color="#0000ff"]as[/color] SumImpressions, SUM(spela) [color="#0000ff"]as[/color] SumSpela, SUM(klick) [color="#0000ff"]as[/color] SumKlick, [color="#ff0000"]date[/color] FROM statistik GROUP BY [color="#ff0000"]date[/color] ORDER BY id DESC LIMIT 0,20");
[color="#0000ff"]while[/color]($row = mysql_fetch_[color="#0000ff"]array[/color]($query4)){
$procent_spel = $row[sumSpela] / $row[sumImpressions] *100;
$procent_click = $row[sumKlick] / $row[sumImpressions] *100;
$sqlData1 = [color="#0000ff"]array[/color]_reverse("$procent_spel");[color="#006400"]// Reverces the array[/color]
[color="#0000ff"]echo[/color] "$sqlData1 ";
[color="#0000ff"]echo[/color] "$procent_spel ";

 

felet är att det inte verkar vara en array. Då jag skall reversa den får jag meddelande:

 

Warning: array_reverse(): The argument should be an array in /home/a/adstat/www/1.4/admin/diagrams/test.php on line 7

 

På den sita echo delen får jag fram mina värden??

1.0412514344386

OSV.

 

Tacksam för hjälp

 

Länk till kommentar
Dela på andra webbplatser

$sqlData1 = [color="#0000ff"]array[/color]_reverse("$procent_spel");[color="#006400"]// Reverces the array[/color]

 

felet är att det inte verkar vara en array.

Korrekt, sånt som står inom citationstecken kallas strängar. Om $procent_spel är en array så skickar du in den genom att säga:

$sqlData1 = [color="#0000ff"]array[/color]_reverse($procent_spel);[color="#006400"]// Reverces the array[/color]

 

Dessutom är det mycket bättre att ställa nya frågor i en ny tråd istället för att fylla på en gammal, annars riskerar man att förlora svar på att nytillkomna läsare inte orkar sätta sig in i hela problematiken (som ju faktiskt är rätt ickerelaterad till problemet).

 

På den sita echo delen får jag fram mina värden??

Det beror på att echo tycker det är helt ok att få en sträng, då slipper den göra om arrayen till en sträng själv (vilket är det du gör när du sätter variabeln inom citationstecken).

[inlägget ändrat 2004-07-19 21:45:28 av fhe]

Länk till kommentar
Dela på andra webbplatser

OK, ledsen för det. Men ibland har jag blivit tillsagd att forsätta på trådar så jag gjorde det.

 

Jag har nu ändrat lite i koden, men problem kvartår.

 

include("variablar.php");

$query4 = mysql_query("SELECT SUM(impressions) AS SumImpressions, SUM(spela) AS SumSpela, SUM(klick) AS SumKlick, date FROM statistik GROUP BY date ORDER BY id DESC LIMIT 0,20");

while($row = mysql_fetch_array($query4)){

$procent_spel[] = $row[sumSpela] / $row[sumImpressions] *100;

$sqlData1 = array_reverse($procent_spel);// Reverces the array

echo "$sqlData1 ";;

}

 

Denna skriver ut.

 

Array Array Array Array Array Array Array Array Array Array Array

 

verkar som jag inte får till:

 

$procent_spel[] = $row[sumSpela] / $row[sumImpressions] *100;

 

Länk till kommentar
Dela på andra webbplatser

verkar som jag inte får till:

 

$procent_spel[] = $row[sumSpela] / $row[sumImpressions] *100;

mellan [] i $row[sumSpela] ska det stå en sträng eller ett tal som indexerar dig in i $row.

Förslagsvis:

$procent_spel[] = $row['SumSpela'] / $row['SumImpressions'] *100;

 

Länk till kommentar
Dela på andra webbplatser

OK provade det. Får nu i alla fall rätt LIMIT men det står forfarande

 

ArrayArrayArray

 

 

[color="#0000ff"]include[/color]("variablar.[color="#0000ff"]php[/color]");
$query4 = [color="#ff0000"]mysql_query[/color]("SELECT SUM(impressions) [color="#0000ff"]as[/color] SumImpressions, SUM(spela) [color="#0000ff"]as[/color] SumSpela, SUM(klick) [color="#0000ff"]as[/color] SumKlick, [color="#ff0000"]date[/color] FROM statistik GROUP BY [color="#ff0000"]date[/color] ORDER BY id DESC LIMIT 0,20");
[color="#0000ff"]while[/color]($row = mysql_fetch_[color="#0000ff"]array[/color]($query4)){
$procent_spel[] = $row['SumSpela'] / $row['SumImpressions'] *100;
$sqlData1 = [color="#0000ff"]array[/color]_reverse($procent_spel);[color="#006400"]// Reverces the array[/color]
[color="#0000ff"]echo[/color] "$sqlData1 ";;
}

 

 

Länk till kommentar
Dela på andra webbplatser

Sluta använda arrayen som om den vore en sträng. Börja med att ta bort echo och skriva ut arrayen med "print_r($sqlData1);" istället. Om det är en array kommer resultatet att bli betydligt trevligare (lägger du dessutom ett <pre> resp. </pre> före och efter blir det snyggare om det är en html-sida).

 

ex.

[color="#0000ff"]echo[/color] "<pre>";
[color="#0000ff"]print[/color]_r($sqlData1);
[color="#0000ff"]echo[/color] "</pre>";

 

Om du envist vill fortsätta att använda echo och betrakta arrayen som en sträng så får du helt göra om den till en sträng först med:

[color="#0000ff"]echo[/color] [color="#ff0000"]implode[/color](",", $sqlData1);

 

 

Länk till kommentar
Dela på andra webbplatser

Arkiverat

Det här ämnet är nu arkiverat och är stängt för ytterligare svar.

×
×
  • Skapa nytt...