datensatz deaktivieren statt löschen

Anacondi

Erfahrenes Mitglied
Hallo an alle, ich habe mal wieder ein problem .
Zur erklärung:
Ich habe in einer datenbank 2 tabellen.
tabelle 1(user): user_id, user_passw, user_name. u.s.w.
tabelle 2(arbeiten):arbeit_id, taetigkeit, beschreibung, arbeitszeit, u.s.w.

jetzt möchte ich, das jeder user jede arbeit einmal ausführt. weiin ein user aber diese arbeit erledigt hat, soll sich die tätigkeit nicht löschen aus der datenbank, sondern für den user nicht mehr bei der arbeitsabfrage erscheinen. die anderen user sollen die arbeit ja auch noch machen.

wie kann ich das realisieren?
Ich bin anfänger in sachen php und lese mich erst ein, also bitte verständnis haben, wenn ich nicht gleich immer alles verstehe. (ausserdem bin ich 61 jahre und will mal was dazu lernen.)
 
ich weiß, das ich da in der datenbank 2 noch was einfügen muß,das ersichtlich wird, ob die arbeit für den jeweiligen user erledigt ist oder nicht, weiß aber nicht, wie ich das anstelle, und weiß auch nicht, wie ich dann die abfrage gestalte, das es ja auch 2 tabellen sind.
 
Zuletzt bearbeitet:
Man könnte in der tabelle1 (user) einfach eine weiter Spalte einfügen Namens: erledigte_arbeiten und speichert dort die IDs der jeweiligen Arbeit (arbeit_id).
Zum überprüfen müsste man dann nur noch mithilfe von explode() vereinzeln und dann eine Abfrage durchführen ob die Arbeit schon vom User ausgeführt wurde.

Man könnte das ganze auch so machen das in tabelle2(arbeiten) eine weitere Spalte hinzukommt und dort die user_id's der jeweiligen User gespeichert wird, welche die Arbeit schon ausgeführt haben.
 
Oder man hält sich an die Spezifikation der 3. Normalform und erstellt eine Kreuz-Tabelle user_x_arbeiten, die 3 Spalten enthält:

id (primary key)
user_id (int) -- zeigt auf tabelle user.user_id
arbeiten_id (int) -- zeigt auf tabelle arbeiten.arbeit_id
UNIQUE KEY für user_id und arbeiten_id

Wenn man einen Datensatz da einfügt, ist sicher gestellt, das ein Benutzer eine Arbeit erledigt hat, außerdem können mehrere Benutzer eine Arbeit erledigen. Das Spielchen kann man sogar noch soweit treiben, das man eine Prozent-Angaben-Spalte da einfügt und den jeweiligen Stand mit speichert.

Just a hint ;-)
 
So, ich habe in der Tabelle2 eine spalte eingefügt, arbeit_erledigt wo eine 1 drin ist, wenn der user die arbeit getan hat ändert sich die auf 0. wenn dann die arbeiten angezeigt werden , kommen nur die mit der 1.so weit so gut. wie aber stelle ich es an, wenn ein user sich einloggt (das ist ja tabelle1) das dann die daten aus der tabelle 2 angezeigt werden, die noch gemacht werden müssen. ich weiß, da gibts nen JOIN befehl, komme damit aber nicht klar, könnte mir jemand nen beispiel script anzeigen, wie ich das aufrufe? ich komme einfach nicht damit klar, wie ich 2 tabellen miteinander verbinde.

zu meinem 2. Problem: wenn ein user die arbeit begonnen hat, und die dauert ja so lange wie ich in der spalte arbeitszeit vorgegeben habe, und dann auf einen anderen link geht (z.b.auf profil, das die zeit dann trotzdem weiterläuft, und nicht wie bei mir, wieder von forne anfängt, wenn er auf arbeit geht.

@saftmeister, danke du warst schneller, wie ich dieses hier geschrieben habe, somit habe ich einen ansatz, wie ich das anstelle.
weist du auch, wie ich mein 2. Problem lösen kann?
 
Zuletzt bearbeitet:
Nun man könnte eine Spalte zeit in der Tabelle arbeiten anlegen. Diese zeigt an, wie lange es wohl dauert, bis eine Arbeit fertig ist. In der Tabelle user_x_arbeiten fügt man eine Spalte start_zeitpunkt hinzu, die automatisch mit dem Zeitstempel des Beginns (z.B. wenn ein Datensatz neu eingefügt wird) versehen wird. Dann kannst du bequem die Differenz (Rest-Arbeitszeit = Aktueller Zeitstempel - Startzeitpunkt) berechnen.
 
Ich habe da noch ein Problem mit meinem kleinen Projekt. in deiner Talelle sind mehrere Arbeiten eingetragen die ab level 2 sind. aber es wird immer nur eine datei angezeigt. wo hab ich da einen Fehler drin: hier der Code
<?php


// Datenbankverbindung aufbauen
$connectionid = mysql_connect ("localhost", "***", "***");
if (!mysql_select_db ("game", $connectionid))
{
die ("Keine Verbindung zur Datenbank");
}
$sql = "SELECT * FROM amt WHERE amt_level = 2";
$result = mysql_query ($sql);



if (mysql_num_rows ($result) > 0)
{
// Benutzerdaten in ein Array auslesen.
$data = mysql_fetch_array ($result);

// Sessionvariablen erstellen und registrieren
$_SESSION["amt_id"] = $data["amt_id"];
$_SESSION["amt_level"] = $data["amt_level"];
$_SESSION["amt_taetigkeit"] = $data["amt_taetigkeit"];
$_SESSION["amt_name"] = $data["amt_name"];
$_SESSION["amt_geld"] = $data["amt_geld"];
$_SESSION["amt_erfahrung"] = $data["amt_erfahrung"];
$_SESSION["amt_zeit"] = $data["amt_zeit"];
}



?>
<html>
<head>
<title>Interne Seite</title>



<span class="Stil2">Tätigkeit:</span> <br>
<?php echo $_SESSION["amt_taetigkeit"]; ?><br>
<span class="Stil2">Info:</span> <br>
<?php echo $_SESSION["amt_name"]; ?> <br>
<span class="Stil2">Erfahrung:</span> <br>
<?php echo $_SESSION["amt_erfahrung"]; ?><br>
<span class="Stil2">Geld:</span> <br>
<?php echo $_SESSION["amt_geld"]; ?> <br>
<span class="Stil2">Zeit:</span> <br>
<?php echo $_SESSION["amt_zeit"]; ?> <br>
<a href="arbeit_test.php" target="_self">annehmen</a>

Ich habs mit einer WHILE svhleife probiert, aber dann zeigt er mir die daten nicht sortiert sonndern hintereinander an, zb. bei Tätigkeit arbeit 1 arbeit2 arbeit2 und dann geht er zur nächsten zeile bei amt_name auch wieder alle namen aus der spalte hintereinander
 
Zuletzt bearbeitet:
Bitte versehe Code-Teile in Zukunft mit dem entsprechenden Tag.

Aber hier ein Denk-Anstoß: Du willst mehrere Jobs ausgeben, also musst du den Anzeige-Part auch mehrere Male durchlaufen. Das kannst du so folgendermaßen erreichen:

PHP:
?>
<html>
<head>
<title>Interne Seite</title>
<?php
if (mysql_num_rows ($result) > 0)
{
  // Benutzerdaten in ein Array auslesen.
  while( $data = mysql_fetch_array ($result) ) { // Hier wird solange passiert, bis keine Datensätze mehr im Ergebnis

    // Sessionvariablen erstellen und registrieren
    $_SESSION["amt_id"] = $data["amt_id"];
    $_SESSION["amt_level"] = $data["amt_level"];
    $_SESSION["amt_taetigkeit"] = $data["amt_taetigkeit"];
    $_SESSION["amt_name"] = $data["amt_name"];
    $_SESSION["amt_geld"] = $data["amt_geld"];
    $_SESSION["amt_erfahrung"] = $data["amt_erfahrung"];
    $_SESSION["amt_zeit"] = $data["amt_zeit"];

    ?>
    <span class="Stil2">Tätigkeit:</span> <br>
    <?php echo $_SESSION["amt_taetigkeit"]; ?><br>
    <span class="Stil2">Info:</span> <br>
    <?php echo $_SESSION["amt_name"]; ?> <br>
    <span class="Stil2">Erfahrung:</span> <br>
    <?php echo $_SESSION["amt_erfahrung"]; ?><br>
    <span class="Stil2">Geld:</span> <br>
    <?php echo $_SESSION["amt_geld"]; ?> <br>
    <span class="Stil2">Zeit:</span> <br>
    <?php echo $_SESSION["amt_zeit"]; ?> <br>
    <a href="arbeit_test.php" target="_self">annehmen</a>
    <?php
  }
}

Warum speicherst du das alles eigentlich in einer Session? Ist IMHO totaler Overhead.
 
Danke, Danke, jetzt ist mir geholfen. die sessionen habe ich, weil ich die Daten später noch auf einer anderen seite brauche.
 
Dann bringt dir das aber auch nichts, denn pro Durchlauf der while-Schleife werden die vorherigen wieder überschrieben. Du müsstest die Daten in ein Array packen und dieses nach der while-Schleife in die Session eintragen. Nur so als Hinweis.
 

Neue Beiträge

Zurück