mysql: mehrere daten in einem Feld

Fragen zu allen Themen rund ums Programmieren außerhalb von phpBB können hier gestellt werden - auch zu anderen Programmiersprachen oder Software wie Webservern und Editoren.
Benutzeravatar
leopittoni
Mitglied
Beiträge: 1162
Registriert: 26.04.2004 20:17

mysql: mehrere daten in einem Feld

Beitrag von leopittoni »

Hallo

Wie kann ich in einer DB im selben Feld mehrere Daten speichern?
Ich habe also eine Tabelle mit einem Eintrag "daten" und darin möchte ich die verschiedenen Daten eintragen. Nun, wie geht das? mit Komma trennen, oder wie? Wie muss die DB-tabelle eingestellt sein? und die kann man dann mit PHP diese Daten filtern/abfragen?

Danke, Léo
Benutzeravatar
Jan500
Ehemaliges Teammitglied
Beiträge: 4199
Registriert: 01.03.2003 21:32
Wohnort: Hamburg
Kontaktdaten:

Beitrag von Jan500 »

hi

naja machbar ist das

du musst das dann als string (in der db varchar, text o.ä einstellen) speichern.

wie du da trennst ist egal, nur musst du nach em selben verfahren nachher das wieder "filtern" also nen regexp
zb das er nach dem , immer trennt...

aber eigentlich ist das nicht sinn einer db...was willst du denn genau machen?

ich würde jedes einzeln in diedb speichern..

Jan
"Life begins at 40 Knots...!" :D
kein (kostenlosen) Support per pn, mail, icq usw. | Kostenlosen Support gibt es hier im Forum!
Benutzeravatar
leopittoni
Mitglied
Beiträge: 1162
Registriert: 26.04.2004 20:17

Beitrag von leopittoni »

Ich habe für jede Person in der DB einen Eintrag.
Diese Personen haben an verschiedenen Tägen einen Einsatz, also ein zweites DB Feld mit den Daten, die zur Person gehören.

Bsb:

Person | Daten

person1 11.02.2006,05.07.2007
person2 08.06.2007

usw.

Nun will ich ausgeben, wer in der kommenden Woche "Dienst" hat.

Eine bessere Idee für mein Problem?

Danke, Léo
Benutzeravatar
Jan500
Ehemaliges Teammitglied
Beiträge: 4199
Registriert: 01.03.2003 21:32
Wohnort: Hamburg
Kontaktdaten:

Beitrag von Jan500 »

ja...

du erstellst eine nee tabelle "einsatz"

die beinhaltet ID, person, einsatz

so erstellst du für jedes datum einen neuen Eintrag und kannst so auch filtern (select * FROM einsatz where person = $user_id)

Jan
"Life begins at 40 Knots...!" :D
kein (kostenlosen) Support per pn, mail, icq usw. | Kostenlosen Support gibt es hier im Forum!
Benutzeravatar
leopittoni
Mitglied
Beiträge: 1162
Registriert: 26.04.2004 20:17

Beitrag von leopittoni »

ok, dann mach ich das so...

Hast Du vielleicht auch eine Idee, wie ich herausfinden könnte, wer "in dieser" Woche Dienst hat?

habs mal so probiert:

Code: Alles auswählen

$timestamp = time();
$datum = date("d.m.Y",$timestamp);
$wochentag = date("w",$timestamp);
echo $datum;
echo $wochentag;

if ($wochentag < 6);
{
$einsatz = ('$datum' || '$datum + 1' || '$datum + 2' || '$datum + 3' || '$datum + 4' || '$datum + 5' || '$datum + 6');
}
else
{
$einsatz = ('$datum' || '$datum + 1');
}
Die Einsätze sind immer Samstags und Sonntags.
Habes also gedacht: Wenn der Wochentag kleines ist als 6, also max. Freitag, zeigt es den Einsatz an, der Datum + 1,2,3,4,5,6 Tage.
Wenn es Samstag oder Sonntag ist, zeigt es Einsätze von Datum + Datum+1Tag.

Ist das eine Fehlüberlegung? Bis jetzt funktionierts jedenaflls nicht...

Léo
Benutzeravatar
Miriam
Mitglied
Beiträge: 12310
Registriert: 13.10.2004 07:18
Kontaktdaten:

Beitrag von Miriam »

Na dann mach es doch besser nur mit ID und Datum des Einsatzes.

1. User-Tabelle: UserID | Person (und weitere Benutzerdaten)
2. Einsatz-Tabelle: UserID | Datum

Code: Alles auswählen

SELECT u.UserID, u.Person, e.Datum FROM User-Tabelle u INNER JOIN Einsatz-Tabelle e 
WHERE u.UserID = e.UserID 
AND e.Datum > $gestern
ORDER BY e.Datum ASC;
$gestern musst Du natürlich noch ausrechnen.
Gruss, Miriam.
Ich schmeiß' alles hin und...
... lasse es liegen
Benutzeravatar
leopittoni
Mitglied
Beiträge: 1162
Registriert: 26.04.2004 20:17

Beitrag von leopittoni »

Hä? Da komm ich leider nicht mit...

Übrigens: an einem Datum wären mehrere "personen" eingetragen. Das heisst es müssen fast in ein Feld mehrer.

Wie ist den das in phpbb? Da müssen ja auch irgendwie verschiedene Mitglieder in eine Gruppe, bzw. mehrere Gruppen für ein Mitglied?

Léo

PS: in der Zwischenzeit hab ichs mal so probiert... futnkioniert aber nicht richtig... Wer kann mir helfen? Danke!

Code: Alles auswählen

<?php

$timestamp = time();
$wochentag = date("w",$timestamp);
$tag = date("d",$timestamp);
$monat = date("m",$timestamp);
$jahr = date("Y",$timestamp);


if ($wochentag == 6 || 7);
{
$einsatz1 = ($tag);
$einsatz2 = ($tag+1);
}
if ($wochentag != 6 || 7);
{
$einsatz1 = ($tag+1);
$einsatz2 = ($tag+2);
$einsatz3 = ($tag+3);
$einsatz4 = ($tag+4);
$einsatz5 = ($tag+5);
$einsatz6 = ($tag+6);
}


$db = mysql_connect("localhost","dbminiadmin","passwort");
mysql_select_db("mini-shop"); 


$miniid = "SELECT customers_id
FROM customers WHERE einsatz = ($einsatz1 || $einsatz2 || $einsatz3 || $einsatz4 || $einsatz5 || $einsatz6)&&!=''";

$samstag = "SELECT customers_firstname, customers_lastname
FROM customers ORDER BY customers_lastname ASC WHERE customer_id = $miniid";
Benutzeravatar
Pyramide
Ehrenadmin
Beiträge: 12734
Registriert: 19.04.2001 02:00
Wohnort: Meschede

Beitrag von Pyramide »

Vielleicht solltest du mal ein PHP/MySQL Tutorial lesen und dich mit Datumswerten und Timestamps befassen. Bei deinem Code geht es nämlich schneller, das richtige aufzulisten, als das falsche.
KB:knigge
Benutzeravatar
Miriam
Mitglied
Beiträge: 12310
Registriert: 13.10.2004 07:18
Kontaktdaten:

Beitrag von Miriam »

leopittoni hat geschrieben:...Übrigens: an einem Datum wären mehrere "personen" eingetragen. Das heisst es müssen fast in ein Feld mehrer....
Na gut, dann mach ich das mal an einem konkreten Beispiel:

Die Tabellen:
1. User-Tabelle: UserID | Person (und weitere Benutzerdaten)
2. Einsatz-Tabelle: UserID | Datum
(Das nach dem Doppelpunkt ( : ) sind die Spalten.)

Daten:
User-Tabelle:
UserID | Person
1 | Knut
2 | Fred
3 | Rita

Einsatz-Tabelle:
UserID | Datum
1 | Datum_1
2 | Datum_1
2 | Datum_2
3 | Datum_3
3 | Datum_1
3 | Datum_2

Dienste sind also wie folgt:
Datum_1: Knut, Fred, Rita
Datum_2: Fred, Rita
Datum_3: Rita

Probier mal -->

Code: Alles auswählen

CREATE TABLE `einsatz` (
  `userid` tinyint(4) NOT NULL,
  `datum` varchar(20) NOT NULL
);

INSERT INTO `einsatz` (`userid`, `datum`) VALUES (1, 'datum_1');
INSERT INTO `einsatz` (`userid`, `datum`) VALUES (2, 'datum_1');
INSERT INTO `einsatz` (`userid`, `datum`) VALUES (3, 'datum_1');
INSERT INTO `einsatz` (`userid`, `datum`) VALUES (3, 'datum_3');
INSERT INTO `einsatz` (`userid`, `datum`) VALUES (2, 'datum_2');
INSERT INTO `einsatz` (`userid`, `datum`) VALUES (3, 'datum_2');

CREATE TABLE `user` (
  `userid` tinyint(4) NOT NULL,
  `name` varchar(50) NOT NULL
);

INSERT INTO `user` (`userid`, `name`) VALUES (1, 'Knut');
INSERT INTO `user` (`userid`, `name`) VALUES (2, 'Fred');
INSERT INTO `user` (`userid`, `name`) VALUES (3, 'Rita');
Dann die Abfrage:

Code: Alles auswählen

SELECT e.datum, u.name
FROM user u
INNER JOIN einsatz e
WHERE u.userid = e.userid
ORDER BY e.datum ASC 
Du kannst natürlich auch abfragen, wer an Datum X Dienst hat, wann User 1 überhaupt Dienst hatte etc.
Gruss, Miriam.
Ich schmeiß' alles hin und...
... lasse es liegen
Benutzeravatar
leopittoni
Mitglied
Beiträge: 1162
Registriert: 26.04.2004 20:17

Beitrag von leopittoni »

Ok, vielen Dank für diese Erläuterung. Werde es also wohl so machen.

So weit bin ich nun gekommen...

Code: Alles auswählen

$timestamp = time();
$wochentag = date("w",$timestamp);
$tag = date("d",$timestamp);
$monat = date("m",$timestamp);
$monatstage = date("t",$timestamp);
$jahr = date("Y",$timestamp);
$jahrestag = date("z",$timestamp);


$nr1 = (6-$wochentag);
$nr2 = (7-$wochentag);

$datumsa = ($tag+$nr1);
$datumso = ($tag+$nr2);

$jahrsa = ($jahrestag+$nr1);
$jahrso = ($jahrestag+$nr2);



if ($datumsa > $monatstage)
{
$monatsa = ($monat+1);
}

if ($datumso > $monatstage)
{
$monatso = ($monat+1);
}

if ($jahrsa > "365")
{
$jahrsa = ($jahr+1);
}

if ($jahrso > "365")
{
$jahrso = ($jahr+1);
}

$einsatzsa = ($datumsa'.'$monat'.'$jahr);
$einsatzso = ($datumso'.'$monat'.'$jahr);
Der letzte Block

Code: Alles auswählen

$einsatzsa = ($datumsa'.'$monat'.'$jahr);
$einsatzso = ($datumso'.'$monat'.'$jahr);
funktionier nicht... Wie kann man richtig die Variabeln verbinden, also $variabel1 (ein Punkt dazwischen) angehängt daran $variabel2 usw?

Danke! Léo
Antworten

Zurück zu „Coding & Technik“