Lista och gruppera enligt månad och antal poster

PHPportalen Forum Index » PHP Mjukstart
Lägg ett bokmärke på hela tråden
Skapa nytt inlägg   Svara på inlägget
Visa föregående ämne :: Visa nästa ämne  
Startad av: Meddelande
Corp



Medlem i: 5766 dagar
Från: Norrköping
Status: Offline



#741193
Inlägg Skrivet: 2016-11-14 23:45      Ämne: Lista och gruppera enligt månad och antal poster Citera

Hej,
försöker skapa en liten blogg för att lära mig PHP och där har jag en mysql med tabell:
blog_posts
- blog_id
- blog_date (formatet datetime, är det korrekt eller ska man gå med timestamp etc?)
- blog_author (VARCHAR 255)
- blog_text (text)

jag kan presentera dessa på sidan utan problem men när det kommer till "högersidan" på sidan där det skall till någon form av arkiv så vill jag att det ser ut som:
- november 2016 (12)
- oktober 2016 (5)

dvs i en lista ska det presenteras månad och år och sedan antalet blogposter som skapas där.

koden jag suttit och trixat med...och vänder ut och in på mig själv snart då jag lyckas bara få fram hur många månader det har samlats i databasen, inte antalet poster...

KOD:
1:
 
2:
<ul>
3:
            
4:
   $stmt = $db->prepare("SELECT blog_date FROM blog_posts GROUP BY MONTH(blog_date) ORDER BY blog_id DESC");
5:
 
6:
   $stmt->execute();
7:
 
8:
   $result = $stmt->fetchAll();
9:
                  
10:
   foreach($result as $row) {
11:
                  
12:
      $blog_month_count = $db->query("SELECT blog_date FROM blog_posts GROUP BY MONTH(blog_date)")->rowCount();
13:
 
14:
      echo "<li><a href=''>". date("F", strtotime($row['blog_date'])) ." (". $blog_month_count .")</a></li>";
15:
   }
16:
</ul>
17:
 
18:
 
 

_________________
Det ska gå...
Till toppen på sidan
Visa användarprofil Skicka privat meddelande Besök användarens hemsida ICQ-nummer
Azreal
Administratör



Medlem i: 4857 dagar
Från: Uppsala, bor i Göteborg
Status: Online



#741195
Inlägg Skrivet: 2016-11-15 08:49      Ämne: Citera

Räkna direkt i SQL med hjälp av funktionen COUNT, se om det funkar. Titta i databas forumet, finns nyligen skapade trådar gällande samma sak.
 

_________________
Konsultation via PM, inte gratis.
Till toppen på sidan
Visa användarprofil Skicka privat meddelande Besök användarens hemsida
harald_b
Moderator



Medlem i: 4598 dagar
Från: Tavesta
Status: Offline



#741197
Inlägg Skrivet: 2016-11-15 13:47      Ämne: Citera

Fälttypen datetime har vissa inbyggda problem. Det är i regel bättre och säkrare att använda ett numeriskt fält med en unix timestamp i istället.
Om du använder 32-bitars heltal måste du köra med unsigned för att slippa 2038-problem.
 

_________________
R.r - Ett fritt affärssystem
Till toppen på sidan
Visa användarprofil Skicka privat meddelande
Corp



Medlem i: 5766 dagar
Från: Norrköping
Status: Offline



#741204
Inlägg Skrivet: 2016-11-16 21:48      Ämne: Citera

Hej harald_b, väldigt osäker på vad du menar men antar att du vill att jag ska välja annat än DATETIME i databasen...

Vad är rekommendationen för en rookie?

det jag vill just här är att presentera månaderna "där det finns" poster samt hur många poster det är på just den månaden.

tex:
- november (7)
- oktober (5)

Vänt och vridigt på SELECT frångan men får antingen bara ut månaderna men inte antalet poster i den månaden, det ska alltså gå att kombinera både SELECT COUNT* och GROUPBY?
 

_________________
Det ska gå...
Till toppen på sidan
Visa användarprofil Skicka privat meddelande Besök användarens hemsida ICQ-nummer
harald_b
Moderator



Medlem i: 4598 dagar
Från: Tavesta
Status: Offline



#741207
Inlägg Skrivet: 2016-11-17 00:24      Ämne: Citera

För fältet blog_date hade jag använt INT UNSIGNED ifall den skall hålla reda på datum och tid, men om den bara skall hålla reda på datum kan du använda fälttypen DATE. Den har inte det problemet som DATETIME har.
Om du använder INT UNSIGNED och sparar datumet som en unix_timestamp så måste du konvertera den till ett datum med FROM_UNIXTIME() innan du kan läsa ut datumdelar ur den.


KOD:
1:
SELECT YEAR(FROM_UNIXTIME(blog_date)), MONTH(FROM_UNIXTIME(blog_date)), COUNT(*) FROM blog_posts GROUP BY YEAR(FROM_UNIXTIME(blog_date)), MONTH(FROM_UNIXTIME(blog_date));
 

_________________
R.r - Ett fritt affärssystem
Till toppen på sidan
Visa användarprofil Skicka privat meddelande
Visa tidigare inlägg:   
Skapa nytt inlägg   Svara på inlägget
PHPportalen Forum Index » PHP Mjukstart
Hoppa till:  
Du kan inte skapa nya inlägg i det här forumet
Du kan inte svara på inlägg i det här forumet
Du kan inte ändra dina inlägg i det här forumet
Du kan inte ta bort dina inlägg i det här forumet
Du kan inte rösta i det här forumet
Du kan inte bifoga filer i detta forum
Du kan inte ladda ner filer från detta forum
Kontakta oss på adressen: info@phpportalen.net
Webbplatsen bygger i grunden på phpBB © 2001, 2002 phpBB Group

Modifieringar har senare gjorts i systemet av PHPportalen
Sid och logotypdesign skapad av Daren Jularic