tantenMedlem sedan nov. 20051 596 inlägg Någon som har lust att leda mig rätt...
Har gjort om nästan alla mina gamla filer till PHP5 och PDO men i den här så har jag totalt fastnat.
Börjar bakifrån...
Vill att outputen ska bli som bifogad bild
och jag har dessa två select
SELECT placering, count( * ) AS antal, year( l.datum ) AS theYear
FROM resultat s
JOIN lopp l ON l.loppID = s.loppID
WHERE typID <5
AND problemID <>9
AND year( l.datum ) >=2006
GROUP BY theYear, placering
SELECT sum( prisSumma ) AS pris, year( l.datum ) AS theYear
FROM resultat r, lopp l, starta s
WHERE r.loppID = l.loppID
AND s.loppID = r.loppID
AND year( l.datum ) >=2006
GROUP BY theYear
Går det? Vad skulle ni i så fall börja med? Eller är det någon som lyckats hitta tutorials för lite mer avancerade selects... Tycker att allt jag hittar är sådant som redan finns i manualen som fortfarande är ganska tunn. Eller?
Blir väldigt tacksam för lite puffar...
PDO är ingen begränsande faktor. Frågan är hur du flyttar resultatet till HTML. När man strävar efter kod som är lätt att underhålla, så bör man undvika att blanda databasanrop med HTML-output. Ett enkelt sätt att göra det är att man kör PDOStatement::fetchAll på resultatet och skickar den resulterande arrayen till sin mall.
Jag har skrivit en artikel som vänder sig till den som vill börja separera affärs-, presentations- och data-accesslogik: http://keryx.se/artikel-47 I den presenterar jag metoden ytterligare.
tantenMedlem sedan nov. 20051 596 inlägg Det låter skönt att det inte finns några begränsningar :-)
Det är väl snarare så att begränsningarna finns hos mig och mina kunskaper.
Ja, jag har läst dina artiklar och även de du hänvisar till och har fått till det mesta rätt (tror jag) Men som jag skrev så blev det totalt stop på den här hämtningen.
Glömde skriva förut att jag har hämtningen klar med fetchAll
Så det är bearbetningen av datan som blir fel... om nu fetchAll är rätt i det här fallet...
Jag vet inte vad jag ska göra när jag kommer hit.
Min gamla kod från sidan.
$result[$row['theYear']][$row['placering']] = $row['antal'];
{
for ($i = 2006; $i <= 2007; $i++)
{
echo("<tr>\n<td>$i</td>\n");
for ($j = 0; $j < 8; $j++)
{
echo("<td>");
if (isset($result[$i][$j]))
echo($result[$i][$j]);
else
echo("0");
echo("</td>\n");
}
Som det är nu får jag ut det sista värdet för 2007 och 0 i alla andra celler. Börjar jag göra något så får jag ut 0 överallt. Så detta med att separera allt och inkludera i en mall har jag inte kommit fram till än.
Medan jag ändå har detta uppe så undrar jag hur man kan ändra det så att det blir innevarande år i stället för 2007.
tantenMedlem sedan nov. 20051 596 inlägg Nej, jag får det inte att fungera
$plac = $db->prepare('SELECT placering, count( * ) AS antal, year( l.datum ) AS theYear, sum( prisSumma ) AS pris
FROM resultat r, lopp l, starta s
WHERE r.loppID = l.loppID
AND s.loppID = r.loppID
AND typID <5
AND problemID <>9
AND year( l.datum ) >=2006
GROUP BY theYear, placering');
$plac->execute();
$result = $plac->fetchAll();
unset($db);
Lade till en print_r($plac); för att se vad jag fick ut
PDOStatement Object ( [queryString] => SELECT placering,
count( * ) AS antal, year( l.datum ) AS theYear, sum( prisSumma )
AS pris FROM resultat r, lopp l, starta s WHERE r.loppID = l.loppID AND s.loppID = r.loppID AND typID <5 AND problemID <>9 AND year( l.datum ) >=2006 GROUP BY theYear,
placering ) 2006 0 0 0 0 0 0 0 0 2 000 kr 2007 0 0 0 0 0 0 0 1 2 000 kr
Och kör jag frågan som den ser ut direkt i PHPmyadmin får jag ut
placering antal theYear pris
0 14 2006 0
1 2 2006 35000
2 6 2006 80500
3 3 2006 23300
4 3 2006 10250
5 7 2006 21200
6 5 2006 10000
0 8 2007 0
1 2 2007 65000
2 1 2007 18000
3 3 2007 26000
4 3 2007 21200
5 4 2007 11800
6 3 2007 7500
7 1 2007 2000
Vad är fel?
Kan du ge en print_r från $result också? (Gärna inom <pre> </pre>)
tantenMedlem sedan nov. 20051 596 inlägg Var det så här du menade md pre-taggarna...
<pre>
Array ( [0] => Array ( [placering] => 0 [0] => 0 [antal] => 14 [1] => 14 [theYear] => 2006 [2] => 2006 [pris] => 0 [3] => 0 ) [1] => Array ( [placering] => 1 [0] => 1 [antal] => 2 [1] => 2 [theYear] => 2006 [2] => 2006 [pris] => 35000 [3] => 35000 ) [2] => Array ( [placering] => 2 [0] => 2 [antal] => 6 [1] => 6 [theYear] => 2006 [2] => 2006 [pris] => 80500 [3] => 80500 ) [3] => Array ( [placering] => 3 [0] => 3 [antal] => 3 [1] => 3 [theYear] => 2006 [2] => 2006 [pris] => 23300 [3] => 23300 ) [4] => Array ( [placering] => 4 [0] => 4 [antal] => 3 [1] => 3 [theYear] => 2006 [2] => 2006 [pris] => 10250 [3] => 10250 ) [5] => Array ( [placering] => 5 [0] => 5 [antal] => 7 [1] => 7 [theYear] => 2006 [2] => 2006 [pris] => 21200 [3] => 21200 ) [6] => Array ( [placering] => 6 [0] => 6 [antal] => 5 [1] => 5 [theYear] => 2006 [2] => 2006 [pris] => 10000 [3] => 10000 ) [7] => Array ( [placering] => 0 [0] => 0 [antal] => 8 [1] => 8 [theYear] => 2007 [2] => 2007 [pris] => 0 [3] => 0 ) [8] => Array ( [placering] => 1 [0] => 1 [antal] => 2 [1] => 2 [theYear] => 2007 [2] => 2007 [pris] => 65000 [3] => 65000 ) [9] => Array ( [placering] => 2 [0] => 2 [antal] => 1 [1] => 1 [theYear] => 2007 [2] => 2007 [pris] => 18000 [3] => 18000 ) [10] => Array ( [placering] => 3 [0] => 3 [antal] => 3 [1] => 3 [theYear] => 2007 [2] => 2007 [pris] => 26000 [3] => 26000 ) [11] => Array ( [placering] => 4 [0] => 4 [antal] => 3 [1] => 3 [theYear] => 2007 [2] => 2007 [pris] => 21200 [3] => 21200 ) [12] => Array ( [placering] => 5 [0] => 5 [antal] => 4 [1] => 4 [theYear] => 2007 [2] => 2007 [pris] => 11800 [3] => 11800 ) [13] => Array ( [placering] => 6 [0] => 6 [antal] => 3 [1] => 3 [theYear] => 2007 [2] => 2007 [pris] => 7500 [3] => 7500 ) [14] => Array ( [placering] => 7 [0] => 7 [antal] => 1 [1] => 1 [theYear] => 2007 [2] => 2007 [pris] => 2000 [3] => 2000 ) )
2006 0 0 0 0 0 0 0 0 2 000 kr 2007 0 0 0 0 0 0 0 1 2 000 kr </pre>
tantenMedlem sedan nov. 20051 596 inlägg Nu har jag lyckats få ut antalen rätt genom att flytta och dona med måsvingarna, tror det blev några till. Fortfarande vet jag inte hur jag ska få ut summorna, men sitter och försöker med ny select.
{
foreach($result as $row)
$result[$row['theYear']][$row['placering']] = $row['antal'];
{
for ($i = 2006; $i <= date('Y'); $i++)
{
echo('<tr><td>'. $i .'</td>');
for ($j = 0; $j < 8; $j++)
{
echo('<td>');
if (isset($result[$i][$j]))
echo($result[$i][$j]);
else
echo("0");
echo('</td>');
}
Men det är ju långt ifrån måsvingefritt och snyggt. Så var hittar jag mer om det?
tantenMedlem sedan nov. 20051 596 inlägg Jag kommer inte vidare...
Alla värden finns, men jag vet inte hur man ska få ihop en fungerande loop.
Vad använder man för metod i sådana här fall?
Tror att mina kommentarer i koden visar på problemet.
require('antal.php');
require('summa.php');
{
for ($i = 2006; $i <= date('Y'); $i++)
{
echo('<tr><td>'. $i .'</td>');//årtalet skrivs ut
for ($j = 0; $j < 8; $j++)
{
echo('<td>'); //här kommer 8 columner med antalet placeringar under året, med nollan om det behövs.
if (isset($result[$i][$j]))
echo($result[$i][$j]);
else
echo("0");
echo("</td>\n");
}
// Här ska den hopräknade summan skrivas ut för varje år. Resultatet hämtas från annan select än de förra.
foreach($resultat as $vinst)
{
$pengar = number_format($vinst['pris'], 0, '', ' ');
echo '<td class="hoger">'. $pengar .'</td>';
// echo '</tr>';
}
echo '</tr>';
//Här är det meningen att loopen ska börja om... Men bägge åren skrivs nu ut varje varv.
//outputen blir<td class="hoger">180 250</td><td class="hoger">151 500</td></tr>
}
}