2016-08-18 2 views
0

i Tisch wie folgt aus:Erhalten Sie Daten aus der Tabelle für jeden Monat

ID  Date    Content  
1 2016-07-29 content for july 29th 
2 2016-07-30 content for july 30th 
3 2016-08-01 content for august 1st 
4 2016-08-02 content for august 2nd 

und ich möchte das Ergebnis wie folgt aus:

Juli 2016

29. Juli 2016 - Inhalte für Juli 29th

30. Juli 2016 - Inhalt für 30. Juli

August 2016

1. August 2016 - Inhalt für 1. August

2. August 2016 - Inhalte für 2. August

i die manuelle foreach-Schleife erstellt haben Daten zu zeigen, wie diese:

meine Modelle:

public function get_july16(){ 
$this->db->select('*'); 
$this->db->from('table'); 
$this->db->where('month(date)','07'); 
$july16 = $this->db->get(); 
return $july16->result(); 
} 
public function get_aug16(){ 
$this->db->select('*'); 
$this->db->from('table'); 
$this->db->where('month(date)','08'); 
$aug16 = $this->db->get(); 
return $aug16->result(); 
} 

meiner Sicht:

Ich frage mich, ob es die einfachste Möglichkeit gibt, foreach Schleife auf einmal zu machen, anstatt eins nach dem anderen zu erstellen.

+0

Die Art und Weise, wie Sie Ihre db Zeug am oberen Rand der Ansicht ist falsch, sollten Sie eine Modellfunktion erstellen dann rufen Sie es in den Controller dann auf http://www.codeigniter.com/user_guide/general/models.html und http://www.codeigniter.com/user_guide/general/models.html#loading-a-model – user4419336

+0

Ja, das weiß ich. eigentlich ist das db stuff in meinen models, ich fusioniere einfach code. –

Antwort

1

Wolfgang1983 hat Recht.

Aber hier ist eine schnelle Lösung, um Ihr Problem zu lösen. (Nicht überprüft)

(Sie <?= statt <?php echo verwenden können)

$this->db->select('*'); 
$this->db->from('table'); 
$datas = $this->db->get()->result(); 

$months = []; 
foreach ($datas as $d) { 
    $date = strtotime($d->date); 
    $actualMonth = date("F Y", $date); // get July 2016, August 2016... 
    $months[$actualMonth][$date] = $d; // Insert data into board 
} 

// loop into all months 
foreach ($months as $month => $days) { 
    echo "<h3>$month</h3>"; // Display month 
    foreach ($days as $day) { 
     echo "<h4>".$day->date."</h4>"; 
     echo "<div>".$day->content."</div>"; 
    } 
} 
+0

danke, es funktioniert jetzt :) –

0

Mathieu Lescaudron Recht hat, können Sie auch das Erzeugungsdatum der SQL-Abfrage bewegen und so etwas wie dies machen (nicht getestet):

$this->db->select('date, content, CONCAT(MONTHNAME(date), " ", YEAR(date)) as humanDate'); 
$this->db->from('table'); 
$this->db->order_by("date", "asc"); 
$all = $this->db->get()->result(); 

und dann können Sie eine foreach machen und prüfen Sie in foreach, dass die humanDate geändert wurde und neue Header machen <h3>

+0

danke für deinen kommentar, ich werde es versuchen :) –

Verwandte Themen