Denkanstoß - DB-Tabelle Organisation

Danke, hab es jetzt mal ohne DateTime unter DateInterval hinbekommen:

PHP:
<?php
function datum_diff($datum, $diff_tage)
{
	$zeitstempel = strtotime($datum);
	$datum_neu = strftime("%Y-%m-%d", $zeitstempel + ($diff_tage*86400));
	
	return $datum_neu;
}

error_reporting(E_ALL|E_STRICT);
ini_set('display_errors', 1);
 
mysql_connect('localhost', 'test') or die(mysql_error());
mysql_select_db('test') or die(mysql_error());
 
$resultset = mysql_query("SELECT * FROM FW_SendLog_Time WHERE DATUM >= DATE_SUB(CURDATE(),INTERVAL 20 DAY) ORDER BY DATUM DESC") or die(mysql_error());
 
$heute = strftime("%Y-%m-%d", time());
$gestern = datum_diff($heute, -1);
$vorgestern = datum_diff($gestern, -1);

$schichtenArray = array();
while($result = mysql_fetch_array($resultset))
{
  $tagLabel = "Davor (" . $result['DATUM'] . ")";
 
  $pruefDatum = $result['DATUM'];
  
  if( $pruefDatum == $heute )
  {
    $tagLabel = "Heute";
  }
  elseif( $pruefDatum == $gestern )
  {
    $tagLabel = "Gestern";
  }
  elseif( $pruefDatum == $vorgestern )
  {
    $tagLabel = "Vorgestern";
  }
  if( ! isset( $schichtenArray[$result['DATUM']]['TAG_LABEL'] ) )
    $schichtenArray[$result['DATUM']]['TAG_LABEL'] = $tagLabel;
    
  $schichtenArray[$result['DATUM']][$result['SCHICHT']] = $result['VERSENDET'];
}
 
// Zum Debuggen
// echo "<pre>";
// var_dump($schichtenArray);
// echo "</pre>";
 
echo "<table>";
 
foreach($schichtenArray as $schicht)
{
  echo "<tr>";
  foreach($schicht as $schichtData)
  {
    echo "<td>" . $schichtData . "</td>";
  }
  echo "</tr>";
}
 
echo "</table>";
 
Hallo,
danke sieht ja sehr gut aus! :)
Ein Problem gibt es aber noch, wie bekomme ich den passenden Spaltenkopf (Schicht) zu angezeigten JA?
Da ja auch die Reihenfolge, in der die Berichte versendet werden unterschiedlich ist.
Code:
Heute	JA	JA	JA
Davor (2013-03-23)	JA	JA	JA
Davor (2013-03-22)	JA	JA	JA	JA
Davor (2013-03-21)	JA	JA
Davor (2013-03-20)	JA	JA
Davor (2013-03-19)	JA	JA	JA
Davor (2013-03-18)	JA	JA	JA	JA
Davor (2013-03-17)	JA	JA	JA
Davor (2013-03-16)	JA	JA	JA
Davor (2013-03-15)	JA	JA	JA
Davor (2013-03-14)	JA	JA	JA
Davor (2013-03-13)	JA	JA	JA
Davor (2013-03-12)	JA	JA	JA
Davor (2013-03-11)	JA	JA	JA
Davor (2013-03-10)	JA	JA	JA
Davor (2013-03-09)	JA	JA	JA
Davor (2013-03-08)	JA	JA	JA
Davor (2013-03-07)	JA	JA	JA
Davor (2013-03-06)	JA	JA	JA
Davor (2013-03-05)	JA	JA	JA	JA
Davor (2013-03-04)	JA	JA	JA	JA
Davor (2013-03-03)	JA	JA
Davor (2013-03-02)	JA	JA
Davor (2013-03-01)	JA	JA	JA	JA

Code:
array(24) {
  ["2013-03-29"]=>
  array(4) {
    ["TAG_LABEL"]=>
    string(5) "Heute"
    ["PP2.2"]=>
    string(2) "JA"
    ["FW3.1"]=>
    string(2) "JA"
    ["PP1.1"]=>
    string(2) "JA"
  }
  ["2013-03-23"]=>
  array(4) {
    ["TAG_LABEL"]=>
    string(18) "Davor (2013-03-23)"
    ["PP1.1"]=>
    string(2) "JA"
    ["PP1.2"]=>
    string(2) "JA"
    ["PP2.2"]=>
    string(2) "JA"
  }
  ["2013-03-22"]=>
  array(5) {
    ["TAG_LABEL"]=>
    string(18) "Davor (2013-03-22)"
    ["PP1.1"]=>
    string(2) "JA"
    ["PP1.2"]=>
    string(2) "JA"
    ["PP2.2"]=>
    string(2) "JA"
    ["FW3.1"]=>
    string(2) "JA"
  }
 
...ja ja das mit dem Sortieren ist schon klar.
Das was ich meine ist, welches JA zu welcher Schicht gehört.
Wie bekomme ich die Spaltenköpfe dazu

Code:
FW3.1 | PP1.1 | PP2.2
  JA  |   JA  |  JA

Code:
array(24) {
  ["2013-03-29"]=>
  array(4) {
    ["TAG_LABEL"]=>
    string(5) "Heute"
    ["FW3.1"]=>
    string(2) "JA"
    ["PP1.1"]=>
    string(2) "JA"
    ["PP2.2"]=>
    string(2) "JA"
  }
 
...ich glaube jetzt hat es klick gemacht.
Dank deiner wunderbaren Vorarbeit, habe ich eine Idee wie ich das Problem mit den Spaltenköpfen hin bekomme. Ich melde mich später. muss mal was zurecht fummeln.
Gruß
 
Ungefähr so:

PHP:
// Zum Debuggen
// echo "<pre>";
// var_dump($schichtenArray);
// echo "</pre>";
 
echo "<table border='2'>\n";
 
$tabellen_kopf_geschrieben = false;
foreach($schichtenArray as $schicht)
{
  $tabellen_zeile = "";
  $tabellen_kopf = "";
  foreach($schicht as $schichtName => $schichtData)
  {
  	if( ! $tabellen_kopf_geschrieben )
  	{
  		$tabellen_kopf .= "  <th>" . $schichtName . "</th>\n";
  	}
    $tabellen_zeile .= "  <td>" . $schichtData . "</td>\n";
  }
  
  if($tabellen_kopf)
  {
  	echo "  <tr>" . $tabellen_kopf . "<tr>\n";
  	$tabellen_kopf_geschrieben = true;
  }
  
  echo "<tr>\n";
  echo $tabellen_zeile;
  echo "</tr>\n";
}
 
echo "</table>";
 
...nee, das ist noch nicht richtig.
Lass mal ich verändere erst einmal die Tabelle wo die Schichten abgespeichert werden.
Dann würde ich mich wieder melden.
Aber trotzdem ein großes DANKESCHÖN für die Hilfe
:):):):)
Code:
array(24) {
  ["2013-03-29"]=>
  array(4) {
    ["TAG_LABEL"]=>
    string(5) "Heute"
    ["FW3.1"]=>
    string(2) "JA"
    ["PP1.1"]=>
    string(2) "JA"
    ["PP2.2"]=>
    string(2) "JA"
  }
  ["2013-03-23"]=>
  array(4) {
    ["TAG_LABEL"]=>
    string(18) "Davor (2013-03-23)"
    ["PP1.1"]=>
    string(2) "JA"
    ["PP1.2"]=>
    string(2) "JA"
    ["PP2.2"]=>
    string(2) "JA"
  }
  ["2013-03-22"]=>
  array(5) {
    ["TAG_LABEL"]=>
    string(18) "Davor (2013-03-22)"
    ["FW3.1"]=>
    string(2) "JA"
    ["PP1.1"]=>
    string(2) "JA"
    ["PP1.2"]=>
    string(2) "JA"
    ["PP2.2"]=>
    string(2) "JA"
  }
  ["2013-03-21"]=>
  array(3) {
    ["TAG_LABEL"]=>
    string(18) "Davor (2013-03-21)"
    ["PP1.1"]=>
    string(2) "JA"
    ["PP1.2"]=>
    string(2) "JA"
  }


Code:
TAG_LABEL FW3.1	PP1.1	PP2.2
Heute        JA	JA	JA
Davor (2013-03-23)	JA	JA	JA
Davor (2013-03-22)	JA	JA	JA	JA
Davor (2013-03-21)	JA	JA
Davor (2013-03-20)	JA	JA
Davor (2013-03-19)	JA	JA	JA
Davor (2013-03-18)	JA	JA	JA	JA
Davor (2013-03-17)	JA	JA	JA
Davor (2013-03-16)	JA	JA	JA
Davor (2013-03-15)	JA	JA	JA
Davor (2013-03-14)	JA	JA	JA
Davor (2013-03-13)	JA	JA	JA
Davor (2013-03-12)	JA	JA	JA
Davor (2013-03-11)	JA	JA	JA
Davor (2013-03-10)	JA	JA	JA
Davor (2013-03-09)	JA	JA	JA
Davor (2013-03-08)	JA	JA	JA
Davor (2013-03-07)	JA	JA	JA
Davor (2013-03-06)	JA	JA	JA
Davor (2013-03-05)	JA	JA	JA	JA
Davor (2013-03-04)	JA	JA	JA	JA
Davor (2013-03-03)	JA	JA
Davor (2013-03-02)	JA	JA
Davor (2013-03-01)	JA	JA	JA	JA

...so,
ich habe mal die Tabelle erweitert. Jetzt werden die Schichten immer in einer festen Spalte gespeichert.
Ist das einfacher zu Händeln?

Code:
INSERT INTO `FW_SendLog_Time` (`ID`, `DATUM`, `SCHICHT_01`, `SCHICHT_02`, `SCHICHT_03`, `SCHICHT_04`, `SCHICHT_05`, `SCHICHT_06`, `SCHICHT_07`, `SCHICHT_08`, `SCHICHT_09`, `SCHICHT_10`, `ERSTELLT`, `VERSENDET`, `STEMPEL`) VALUES

(122, '2013-03-18',  '', '', 'PP1.1', '', '', '', '', '', '', '', '', 'JA', '2013-03-29 18:18:08'),
(123, '2013-03-18',  '', '', '', '', 'PP2.2', '', '', '', '', '', '', 'JA', '2013-03-29 18:18:58'),
(124, '2013-03-18',  'FW3.1', '', '', '', '', '', '', '', '', '', '', 'JA', '2013-03-29 18:22:17');
(125, '2013-03-18',  '', 'FW3.2', '', '', '', '', '', '', '', '', '', 'JA', '2013-03-29 18:23:14');
(126, '2013-03-18',  '', '', '', 'PP1.2', '', '', '', '', '', '', '', 'JA', '2013-03-29 18:25:10');

PHP:
// Insert FW_SendLog_Time
$stempel = date("Y-m-d H:i:s",time());
if("FW3.1" == ($_SESSION['schicht'])) { $schicht_01 = $_SESSION['schicht']; }
if("FW3.2" == ($_SESSION['schicht'])) { $schicht_02 = $_SESSION['schicht']; }
if("PP1.1" == ($_SESSION['schicht'])) { $schicht_03 = $_SESSION['schicht']; }
if("PP1.2" == ($_SESSION['schicht'])) { $schicht_04 = $_SESSION['schicht']; }
if("PP2.2" == ($_SESSION['schicht'])) { $schicht_05 = $_SESSION['schicht']; }

$sql = "
		INSERT INTO `FW_SendLog_Time` (
    		`DATUM`, 
    		`SCHICHT_01`,
    		`SCHICHT_02`,
    		`SCHICHT_03`,
    		`SCHICHT_04`,
    		`SCHICHT_05`,
    		`SCHICHT_06`,
    		`SCHICHT_07`,
    		`SCHICHT_08`,
    		`SCHICHT_09`,
    		`SCHICHT_10`,
       		`ERSTELLT`,
    		`VERSENDET`,
    		`STEMPEL` )
		VALUES(
    		'{$_SESSION['DATUM_mysql']}',
    		'{$schicht_01}',
    		'{$schicht_02}',
    		'{$schicht_03}',
    		'{$schicht_04}',
    		'{$schicht_05}',
    		'',
    		'',
    		'',
    		'',
    		'',
    		'',
    		'JA',
    		'{$stempel}'
    		)";
 
Hallo,
so nun ist es fast so, wie ich es haben möchte.
Gibt es noch eine Möglichkeit, in der Spalte Datum die Anzeige des Datum's pro Tag auf eine Zeile zu beschränken?
Das zBsp. am 18.03.2013 nur 1 Zeile mit allen Schichten (siehe Wunschansicht)

Gruß

Code:
            Schicht_01	Schicht_02	Schicht_03	Schicht_04	Schicht_05	Schicht_06
					
2013-03-29	 FW3.1					
2013-03-29					                                PP2.2	
2013-03-23						
2013-03-23						
2013-03-23											
2013-03-19						
2013-03-19									
2013-03-18			                 PP1.1			
2013-03-18			 		                                PP2.2	
2013-03-18	 FW3.1

Wunschansicht:
Code:
               Schicht_01	Schicht_02	Schicht_03	Schicht_04	Schicht_05	Schicht_06
2013-03-18	   FW3.1                    PP1.1                   PP2.2

...Habe es jetzt mal mit GROUP versucht, leider wird nur das Datum aufgelistet. Die Datensätze "$result['SCHICHT_0x']" bleiben aber leer.

PHP:
$resultset = mysql_query("SELECT * FROM FW_SendLog_Time WHERE DATUM GROUP BY DATUM ORDER BY DATUM DESC") or die(mysql_error());

// Tabelle erstellen fuer die Ausgabe 
echo "<table border='1'>";
	echo "<tr>";
	echo "<th></th>";
	echo "<th>Schicht_01</th>";
    echo "<th>Schicht_02</th>";
    echo "<th>Schicht_03</th>";
    echo "<th>Schicht_04</th>";
    echo "<th>Schicht_05</th>";
    echo "<th>Schicht_06</th>";  
    echo "</tr>";
    
while($result = mysql_fetch_array($resultset))
{
    echo "<tr>";
    echo "<td> ".$result['DATUM']." </td>\n";
    echo "<td> ".$result['SCHICHT_01']." </td>\n";
    echo "<td> ".$result['SCHICHT_02']." </td>\n";
    echo "<td> ".$result['SCHICHT_03']." </td>\n";
    echo "<td> ".$result['SCHICHT_04']." </td>\n";
    echo "<td> ".$result['SCHICHT_05']." </td>\n";
    echo "<td> ".$result['SCHICHT_06']." </td>\n";
    echo "</tr>\n";
}
echo "</table>";
 
Zurück