Problem med formulering för hämtning från MySQL med PHP

Permalänk

Problem med formulering för hämtning från MySQL med PHP

Hej, jag har ett problem.

Jag har en tabell i MySQL där jag plockar ut datum (date) och plats (varchar).

Jag vill presentera det så att resultatet presenteras med den ordningen exakt som följande:

2011 January 1. Stockholm 17. Malmö February 3. Göteborg 29. Örebro ... December 6. Luleå 19. Piteå 2010 January ...

När jag först formulerade mitt problem i ett annat forum undrade jag hur jag skulle gå tillväga för att slippa göra 2 olika SQL-anrop, men jag kom på att jag förmodligen inte kan kringgå det. Jag uppskattar om någon vill skriva en kod som fungerar, har suttit ett bra tag med det men blir inte klok på det!

Skulle gissa att det är något liknande

SQL-anrop där jag plockar ut 'datum' från tabell 'gigs' DESC Loopa { Hämta ut andra gången och sätt villkor med hjälp av $loop['datum'] för att få ut data för aktuell månad, sortera ASC den här gången Loopa { Presentera dagarna i aktuell månad } }

Jag tror mitt största problem är i SQL-anropet (andra gången) där jag måste hämta data för en aktuell månad (från förra loopen), problemet är att det lagras som YYYY-MM-DD, min rad ser ut som följande "SELECT plats, datum FROM gigs WHERE datum == månad ORDER BY datum ASC".

Tacksam om någon kan hjälpa till!
/R

Permalänk

Såhär ser min kod ut för tillfället, men den klagar på andra SQL-anropet ($sql2):

<?php $sql = "SELECT datum FROM gigs ORDER BY datum DESC"; $result = mysql_query($sql); while($r = mysql_fetch_array($result)) { $date = $r['datum']; $date_new = new DateTime($date); $year = $date_new->format('Y'); $sql2 = "SELECT plats, datum FROM gigs WHERE DATEPART(yyyy, datum) == {$year} ORDER BY datum ASC"; $result2 = mysql_query($sql2); $date = $r['datum']; $date_new = new DateTime($date); $month = $date_new->format('F'); while($r2 = mysql_fetch_array($result2)) { $date2 = $r2['datum']; $date_new2 = new DateTime($date2); $month2 = $date_new2->format('F'); if($month != $month2) { // if($datum != substr($r2['datum'], 0, 7)) { echo "<br><b>".$month."</b><br>"; } echo $r2['datum']." >> ".$r2['plats']."<br>"; $month = $month2; // $datum = substr($r2['datum'], 0, 7); } } ?>

Permalänk

Folk verkar inte vara så aktiv i den här delen av forumet, kanske har med tidpunkten att göra?

Iallafall, jag hittade en lösning efter evigt googlande och fann lösningen med
*GROUP BY
*DATE_FORMAT( datum, '%Y' )

Nu har jag bara ett litet irriterande problem kvar att finna en lösning på, sen kan jag nog lämna den delen av min hemsida för att gå på nästa och ställa nya frågor här

Den skriver ut allting precis som jag vill, förutom att det visas:

2011

January

February

...osv

2010

Dec //borde inte vara där

October
16. Blabla
17. Blabla

November
1. Blabla
17. Blabla

December
4. Blabla
24. Blabla

Kolla gärna igenom min kod och se om ni kan hitta någonting som kan påverka detta.

<?php $sql = "SELECT datum FROM gigs GROUP BY DATE_FORMAT( datum, '%Y' ) ORDER BY datum DESC"; $result = mysql_query($sql); while($r = mysql_fetch_array($result)) { $date = $r['datum']; $date_new = new DateTime($date); $year = $date_new->format('Y'); $month = $date_new->format('M'); $day = $date_new->format('d'); $sql2 = "SELECT * FROM gigs WHERE DATE_FORMAT( datum, '%Y' ) = $year ORDER BY datum ASC"; $result2 = mysql_query($sql2); echo "<tr height=20px><td></td><td align=center><b>".$year."</b></td></tr>"; echo "<tr><td><b>".$month."</b></td></tr>"; while($r2 = mysql_fetch_array($result2)) { $date2 = $r2['datum']; $date_new2 = new DateTime($date2); $year2 = $date_new2->format('Y'); $month2 = $date_new2->format('M'); $day2 = $date_new2->format('j'); if($month != $month2) { echo "<tr><td> </td></tr><tr><td><b>".$month2."</b></td></tr>"; } $month = $month2; echo "<tr class=giglist><td>".$day2."</td><td>".$r2['plats']."</td></tr>"; } echo "</td></tr>"; } ?>

Permalänk
Medlem

Du vill alltså inte skriva ut månader som varit och är tomma eller hur menar du? Enklast skulle vara att kolla det när du loopar igenom med PHP, men det går nog också att lösa med MySQL(tyvärr är jag dock inte tillräckligt bra på det).

Visa signatur

Citera eller nämn gärna mig (@ToJa92) om du svarar på något jag skrivit.
Uppskattar du eller blir hjälpt av ett inlägg jag skrivit är jag tacksam om du gillar det.

Permalänk
Medlem

jag hade hämtat allt med en sql sedan loopat igenom det med php och gjort om det så jag får det som jag vill ha det.

jag rekomenderar dig att posta frågan på stackoverflow där lär du få svar betydligt snabbare än här på swec.