2017-09-30 1 views
2

Der Tabellenname ist "evaluation" mit Spalte player_id, player_eval und eval_date.
Ich werte Spieler sagen wir jeden Tag, wenn ich also den bestimmten Spieler auswerte, werden die Daten in der Datenbank gespeichert. Wenn ich denselben Player am selben Tag speichern möchte, werden die Daten nicht mit player_id und eval_date eingefügt.

Irgendeine Idee, wie man es macht? Danke

PS: player_id ist kein Primärschlüssel, also kann ich den Spieler in die gleiche Tabelle mit der gleichen ID in anderem Datum einfügen.Wie verhindert man das Einfügen, wenn ID und Datum bereits in der Datenbank vorhanden sind?

public function update() { 
$players = array(); 

foreach ($this->input->post('checkbox') as $checkbox) { 
    list($value, $player_id) = explode('::', $checkbox); 
    self::update_player($players, $player_id, 'player_att1', $value); 
} 
foreach ($this->input->post('checkbox2') as $checkbox) { 
    list($value, $player_id) = explode('::', $checkbox); 
    self::update_player($players, $player_id, 'player_att2', $value); 
} 
foreach ($this->input->post('checkbox3') as $checkbox) { 
    list($value, $player_id) = explode('::', $checkbox); 
    self::update_player($players, $player_id, 'player_att3', $value); 
} 
foreach ($this->input->post('checkbox4') as $checkbox) { 
    list($value, $player_id) = explode('::', $checkbox); 
    self::update_player($players, $player_id, 'player_att4', $value); 
} 
$this->load->model('Evaluation_model'); 
foreach ($players as $player_id => $data) { 
    $this->Evaluation_model->editview($player_id, $data); 
} 
redirect(base_url('Evaluations/evaluate')); 
} 

static function update_player(&$players, $id, $property, $value) { 
if (!isset($players[$id])) { 
    $players[$id] = array(
     'player_id' => $id, 
     'player_att1' => 0, 
     'player_att2' => 0, 
     'player_att3' => 0, 
     'player_att4' => 0, 
     'player_atotal' => 0 
    ); 
} 
$players[$id][$property] = $value; 
$players[$id]['player_atotal'] += $value; 
} 

Antwort

1

Zuerst müssen Sie prüfen, ob der Spieler mit dem angegebenen Datum vorhanden ist oder nicht, indem einfach mit der Zählung des Spielers Überprüfung wie folgt

/* This will get you the count of the player for the specific date */ 
    $playerAlreadyExistsCount = $this->db 
    ->where('player_id', $palyerId) 
    ->where('eval_date', $evalDate) 
    ->count_all('evaluation'); 

    if($playerAlreadyExistsCount > 0){ 
     //Player already exists. You can set a flashdata and show the user that the player is already inserted 
    }else{ 
     //Player is not existing so create the new player here. 
    } 
+0

Wie kann ich dies ausführen? "$ playerAlreadyExistsCount = $ this-> db" startet gerade. – Kate

+0

Sie müssen den obigen Code in Ihr Codeigniter-Modell einfügen. Hier habe ich eine Verkettung gemacht, die auch in einer Zeile geschrieben werden kann als $ this-> db-> where() -> where() -> count_all ('table_name'); Wenn Sie verketten, wird es viel einfacher. –

0

Sie können das Einführen einer Reihe verhindern, wenn bereits ein anderes mit dem gleichen „id“ vorhanden ist, und gleichen „date“ Verwendung der SQL eindeutigen Einschränkungen. https://stackoverflow.com/a/3474309/2768318, Ändern Ihrer Datenbank.

Wenn Sie das Einfügen über PHP vermeiden möchten, sollten Sie zuerst alle PLAYER mit dieser ID lesen und dann prüfen, ob es noch ein anderes mit dem gleichen Datum gibt.

Verwandte Themen