Denkanstoß - DB-Tabelle Organisation

inspiron8

Mitglied
Denkanstoß - DB-Tabelle Organisation - SELECT, UPDATE

Hallo,
pro Schicht soll ein Bericht mit Daten aus einer DB als PDF (mit phpmail) versendet werden. Die Koll. wollen eine Übersicht "habe ich den Bericht versendet oder nicht?".
Nun dachte ich mir, da ich mit dem phpmailer keine Versandbestätigung bekomme, in einer DB-Tabelle einen Eintrag: Datum, Schichtname & "Versendet = JA" zu speichern.

Eine weitere Mail als Bestätigung, kommt nicht in Frage. Es gibt schon genügend Mail-Verkehr in der Firma.

Nun würde ich eine Übersicht von Heute minus 20 Tage a 5 Schichten machen wollen.

Muss ich jetzt für 20 Tage x 5 Schichten jeweils eine DB Abfrage "SELECT * FROM Sendebericht" machen oder gib es noch bessere Möglichkeiten?

Gruß
 
Zuletzt bearbeitet:
Nein, musst du nicht. SQL kann mit Datumsbereichen durchaus was anfangen.

Code:
SELECT * FROM tabelle WHERE datum >= DATE_SUB(CURDATE(),INTERVAL 20 DAY);

Dürfte alle Einträge listen, die vom Datum her weniger oder gleich 20 Tage alt sind. Das kannst du dann natürlich in PHP mit mysql_query() (oder MySQLi bzw. PDO) ausführen und die Ergebnisse mittels Schleife und mysql_fetch_xxxxx() abholen.

Frohe Ostern
 
Hallo,
vielleicht denke ich gerade so kompliziert.
Wenn das phpmail Script nach klick "Versenden"-Button abgearbeitet wird, erfolgt am ende des Schiptes noch ein Eintrag in der DB-Tabelle "FW_SendLog_Time".

PHP:
$sql = "INSERT INTO `FW_SendLog_Time` (
    		`DATUM`, 
    		`SCHICHT`,
    		`VERSENDET`)
		VALUES(
    		'{$_SESSION['DATUM_mysql']}',
    		'{$_SESSION['schicht']}',
    		'JA'
    		)";



Code:
ID |  DATUM     | SCHICHT | VERSENDET

47 | 2013-03-23 |   FW3.2 | JA

46 | 2013-03-07 |   PP1.2 | JA

45 | 2013-03-18 |   PP2.2 | JA

44 | 2013-03-18 |   PP1.2 | JA

42 | 2013-03-18 |   FW3.1 | JA

Mein Wunschgedanke für die Übersicht:
Wie müsste dann da "mysql_fetch_xxxxx()" dafür aussehen?

Code:
              | Schicht 1  | Schicht 2  | Schicht 3  | Schicht 4  | Schicht 5  | Schicht 6  |

Heute         |      JA    |      JA    |      JA    |      JA    |      JA    |      JA    |        
Gestern       |      JA    |      JA    |      JA    |      JA    |      JA    |      JA    |
Vorgestern    |      JA    |      JA    |   Nein     |      JA    |      JA    |      JA    |
Davor         |      JA    |      JA    |      JA    |      JA    |    Nein    |      JA    |
.
.
.
 
Zuletzt bearbeitet:
Hmm,

versuch es mal so:

PHP:
error_reporting(E_ALL|E_STRICT);
ini_set('display_errors', 1);

// mysql_connect() und mysql_select_db()...

$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 = DateTime::createFromFormat("Y-m-d");
$gestern = $heute->sub(new DateInterval('P1D'));
$vorgestern = $gestern->sub(new DateInterval('P1D'));

$schichtenArray = array();
while($result = mysql_fetch_array($resultset))
{
  $tagLabel = "Davor";

  $pruefDatum = new DateTime($result['DATUM']);

  if( pruefDatum == $heute )
  {
    $tagLabel = "Heute";
  }
  elseif( $tag == $gestern )
  {
    $tagLabel = "Gestern";
  }
  elseif( $tag == $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>";

Vollkommen ungetestet und funktioniert aufgrund von DateTime und DateInterval erst ab PHP 5.3.

Dein Datenmodell machts kompliziert. Du kannst es etwas vereinfachen, wenn du die Schichten in Spalten darstellst. Funktioniert aber nur, wenn du nur 6 Schichten hast, sonst musst du Spalten hinzufügen. Nach dritter Normalisierungsregel ist das dann aber natürlich nicht elegant. So wie du es hast ist es nach Gesichtspunkten der Normalisierung ok, aber halt kompliziert das im Code abzubilden. Mir fällt erstmal keine andere Lösung dafür ein.
 
Ich habe lokal die aktuelle php-Version: 5.3.15

und bekomme folgende Fehlermeldung:

Warning: DateTime::createFromFormat() expects at least 2 parameters, 1 given in TEST_sql_Liste.php on line 43
Fatal error: Call to a member function sub() on a non-object in TEST_sql_Liste.php on line 44

Gibt es für "DateTime" eine Alternative?
Die Bezeichnung "Heute" "Gestern"... können natürlich auch ein Datum sein. Das war ja nur ein Gedanke!

Gruß

Ich sehe gerade auf Arbeit ist die Version 5.1.6 drauf. :(
 
Zuletzt bearbeitet:
Fatal error: Call to a member function sub() on a non-object in TEST_sql_Liste.php on line 48

Zeile 48 ist diese:

$gestern = $heute->sub(new DateInterval('P1D'));
 
Ich werde jetzt doch mal testen, bevor ich weitere Hinweise gebe ;-)

Hast du Struktur und Test-Daten für die Tabelle FW_SendLog_Time, die du bereit stellen kannst?
 
...wäre das SQL ok?

Code:
-- phpMyAdmin SQL Dump
-- version 3.5.4
-- http://www.phpmyadmin.net
--
-- Host: localhost
-- Erstellungszeit: 29. Mrz 2013 um 16:04
-- Server Version: 5.5.28
-- PHP-Version: 5.3.15

SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
SET time_zone = "+00:00";


/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;

--
-- Datenbank: `DB-2435476_45`
--

-- --------------------------------------------------------

--
-- Tabellenstruktur für Tabelle `FW_SendLog_Time`
--

CREATE TABLE IF NOT EXISTS `FW_SendLog_Time` (
  `ID` int(7) NOT NULL AUTO_INCREMENT,
  `DATUM` date NOT NULL,
  `SCHICHT` varchar(6) CHARACTER SET utf8 NOT NULL,
  `ERSTELLT` text CHARACTER SET utf8 NOT NULL,
  `VERSENDET` text CHARACTER SET utf8 NOT NULL,
  `STEMPEL` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`ID`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 COLLATE=latin1_german2_ci AUTO_INCREMENT=118 ;

--
-- Daten für Tabelle `FW_SendLog_Time`
--

INSERT INTO `FW_SendLog_Time` (`ID`, `DATUM`, `SCHICHT`, `ERSTELLT`, `VERSENDET`, `STEMPEL`) VALUES
(48, '2013-03-01', 'PP1.1', '', 'JA', '2013-03-29 13:25:05'),
(49, '2013-03-02', 'PP1.1', '', 'JA', '2013-03-29 13:25:16'),
(50, '2013-03-03', 'PP1.1', '', 'JA', '2013-03-29 13:25:21'),
(51, '2013-03-04', 'PP1.1', '', 'JA', '2013-03-29 13:25:26'),
(52, '2013-03-05', 'PP1.1', '', 'JA', '2013-03-29 13:25:31'),
(53, '2013-03-06', 'PP1.1', '', 'JA', '2013-03-29 13:25:36'),
(54, '2013-03-07', 'PP1.1', '', 'JA', '2013-03-29 13:25:40'),
(55, '2013-03-08', 'PP1.1', '', 'JA', '2013-03-29 13:25:45'),
(56, '2013-03-09', 'PP1.1', '', 'JA', '2013-03-29 13:25:49'),
(57, '2013-03-10', 'PP1.1', '', 'JA', '2013-03-29 13:25:53'),
(58, '2013-03-11', 'PP1.1', '', 'JA', '2013-03-29 13:25:57'),
(59, '2013-03-12', 'PP1.1', '', 'JA', '2013-03-29 13:26:01'),
(60, '2013-03-13', 'PP1.1', '', 'JA', '2013-03-29 13:26:05'),
(61, '2013-03-14', 'PP1.1', '', 'JA', '2013-03-29 13:26:09'),
(62, '2013-03-15', 'PP1.1', '', 'JA', '2013-03-29 13:26:17'),
(63, '2013-03-16', 'PP1.1', '', 'JA', '2013-03-29 13:26:22'),
(64, '2013-03-17', 'PP1.1', '', 'JA', '2013-03-29 13:26:26'),
(65, '2013-03-18', 'PP1.1', '', 'JA', '2013-03-29 13:26:30'),
(66, '2013-03-19', 'PP1.1', '', 'JA', '2013-03-29 13:26:34'),
(67, '2013-03-20', 'PP1.1', '', 'JA', '2013-03-29 13:26:38'),
(68, '2013-03-21', 'PP1.1', '', 'JA', '2013-03-29 13:26:43'),
(69, '2013-03-22', 'PP1.1', '', 'JA', '2013-03-29 13:26:47'),
(70, '2013-03-23', 'PP1.1', '', 'JA', '2013-03-29 13:26:51'),
(71, '2013-03-01', 'PP1.2', '', 'JA', '2013-03-29 13:27:39'),
(72, '2013-03-02', 'PP1.2', '', 'JA', '2013-03-29 13:27:43'),
(73, '2013-03-03', 'PP1.2', '', 'JA', '2013-03-29 13:27:47'),
(74, '2013-03-04', 'PP1.2', '', 'JA', '2013-03-29 13:27:52'),
(75, '2013-03-05', 'PP1.2', '', 'JA', '2013-03-29 13:27:56'),
(76, '2013-03-06', 'PP1.2', '', 'JA', '2013-03-29 13:28:01'),
(77, '2013-03-07', 'PP1.2', '', 'JA', '2013-03-29 13:28:07'),
(78, '2013-03-08', 'PP1.2', '', 'JA', '2013-03-29 13:28:14'),
(79, '2013-03-09', 'PP1.2', '', 'JA', '2013-03-29 13:28:23'),
(80, '2013-03-10', 'PP1.2', '', 'JA', '2013-03-29 13:28:29'),
(81, '2013-03-11', 'PP1.2', '', 'JA', '2013-03-29 13:28:34'),
(82, '2013-03-12', 'PP1.2', '', 'JA', '2013-03-29 13:28:38'),
(83, '2013-03-13', 'PP1.2', '', 'JA', '2013-03-29 13:28:42'),
(84, '2013-03-14', 'PP1.2', '', 'JA', '2013-03-29 13:28:47'),
(85, '2013-03-15', 'PP1.2', '', 'JA', '2013-03-29 13:28:51'),
(86, '2013-03-16', 'PP1.2', '', 'JA', '2013-03-29 13:28:55'),
(87, '2013-03-17', 'PP1.2', '', 'JA', '2013-03-29 13:28:59'),
(88, '2013-03-18', 'PP1.2', '', 'JA', '2013-03-29 13:29:03'),
(89, '2013-03-19', 'PP1.2', '', 'JA', '2013-03-29 13:29:08'),
(90, '2013-03-20', 'PP1.2', '', 'JA', '2013-03-29 13:29:12'),
(91, '2013-03-21', 'PP1.2', '', 'JA', '2013-03-29 13:29:16'),
(92, '2013-03-22', 'PP1.2', '', 'JA', '2013-03-29 13:29:20'),
(93, '2013-03-23', 'PP1.2', '', 'JA', '2013-03-29 13:29:24'),
(94, '2013-03-01', 'PP2.2', '', 'JA', '2013-03-29 13:29:47'),
(95, '2013-03-04', 'PP2.2', '', 'JA', '2013-03-29 13:30:00'),
(96, '2013-03-05', 'PP2.2', '', 'JA', '2013-03-29 13:30:05'),
(97, '2013-03-06', 'PP2.2', '', 'JA', '2013-03-29 13:30:09'),
(98, '2013-03-07', 'PP2.2', '', 'JA', '2013-03-29 13:30:14'),
(99, '2013-03-08', 'PP2.2', '', 'JA', '2013-03-29 13:30:18'),
(100, '2013-03-09', 'PP2.2', '', 'JA', '2013-03-29 13:30:23'),
(101, '2013-03-10', 'PP2.2', '', 'JA', '2013-03-29 13:30:27'),
(102, '2013-03-11', 'PP2.2', '', 'JA', '2013-03-29 13:30:31'),
(103, '2013-03-12', 'PP2.2', '', 'JA', '2013-03-29 13:30:35'),
(104, '2013-03-13', 'PP2.2', '', 'JA', '2013-03-29 13:30:39'),
(105, '2013-03-14', 'PP2.2', '', 'JA', '2013-03-29 13:30:46'),
(106, '2013-03-15', 'PP2.2', '', 'JA', '2013-03-29 13:30:51'),
(107, '2013-03-16', 'PP2.2', '', 'JA', '2013-03-29 13:30:57'),
(108, '2013-03-17', 'PP2.2', '', 'JA', '2013-03-29 13:31:02'),
(109, '2013-03-18', 'PP2.2', '', 'JA', '2013-03-29 13:31:09'),
(110, '2013-03-22', 'PP2.2', '', 'JA', '2013-03-29 13:31:24'),
(111, '2013-03-23', 'PP2.2', '', 'JA', '2013-03-29 13:31:30'),
(112, '2013-03-01', 'FW3.1', '', 'JA', '2013-03-29 13:31:49'),
(113, '2013-03-04', 'FW3.1', '', 'JA', '2013-03-29 13:31:57'),
(114, '2013-03-05', 'FW3.1', '', 'JA', '2013-03-29 13:32:02'),
(115, '2013-03-18', 'FW3.1', '', 'JA', '2013-03-29 13:32:07'),
(116, '2013-03-19', 'FW3.1', '', 'JA', '2013-03-29 13:32:11'),
(117, '2013-03-22', 'FW3.1', '', 'JA', '2013-03-29 13:32:16');

/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
 
Zurück