mysql / php / codeigniter Обновить несколько строк с одинаковым идентификатором - PullRequest
0 голосов
/ 19 ноября 2018

У меня есть эти 2 таблицы:

questions            answers
+-----+---------+    +------+------+---------+
| id_q| question|    | id_q | id_a | answer  |
+=====+=========+    +======+======+=========+
|  1  |question1|    |   1  |   1  | answer1 |
+-----+---------+    +------+------+---------+
|  2  |question2|    |   1  |   2  | answer2 |
+-----+---------+    +------+------+---------+
                     |   1  |   3  | answer3 |
                     +------+------+---------+
                     |   1  |   4  | answer4 |
                     +------+------+---------+
                     |   2  |   5  | answer5 |
                     +------+------+---------+
                     |   2  |   6  | answer6 |
                     +------+------+---------+
                     |   2  |   7  | answer7 |
                     +------+------+---------+
                     |   2  |   8  | answer8 |
                     +------+------+---------+

И я пытаюсь сделать форму обновления, где я мог бы обновить каждый ответ на каждый вопрос.Изображение формы ниже (номер сверху - это выбранный id_q).

На данный момент у меня есть:

this->db->SELECT('*');
this->db->FROM('answers');
this->db->WHERE('answers.id_q', $x); // $x -> variable that has the id o the selected question
this->db->UPDATE('answers', $data);

Какойочевидно, что происходит обновление всех записей в таблице, имеющих одинаковый id_q, что приводит к чему-то вроде:

answers
+------+------+---------+
| id_q | id_a | answer  |
+======+======+=========+
|   1  |   1  | answer1 |
+------+------+---------+
|   1  |   2  | answer1 |
+------+------+---------+
|   1  |   3  | answer1 |
+------+------+---------+
|   1  |   4  | answer1 |
+------+------+---------+

В итоге я хотел бы получить возможность обновлять каждый ответкаждого вопроса.Уже пытались использовать временные таблицы, но безуспешно.

РЕДАКТИРОВАТЬ: я ожидаю получить, когда я обновлю ответы, как это:

https://imgur.com/a/SPg81IA

Чтобы получитьбаза данных примерно такая:

answers
+------+------+-------------+
| id_q | id_a |   answer    |
+======+======+=============+
|   1  |   1  | answerone   |
+------+------+-------------+
|   1  |   2  | answertwo   |
+------+------+-------------+
|   1  |   3  | answerthree |
+------+------+-------------+
|   1  |   4  | answerfour  |
+------+------+-------------+

Но в данный момент я получаю все четыре поля с помощью answerone.

Ответы [ 3 ]

0 голосов
/ 19 ноября 2018

Прежде всего в вашей форме обновления

В файле просмотра:

Для поля ввода ответ1, ответ2 и т. Д.

Поместите имя для полей ввода, как это в массиве:

<input type="text" name="answers[]" placeholder="Answer 1"/>
<input type="text" name="answers[]" placeholder="Answer 2"/>
<input type="text" name="answers[]" placeholder="Answer 3"/>
<input type="text" name="answers[]" placeholder="Answer 4"/>

На стороне контроллера: Вы можете получить эти поля как:

$answers = $this->input->post('answers');
$update_data = array();
for($answers as $key => $value){
  $update_data['answer'] = $value;
  //This part now should be done in model side:
  $this->db->where('id_q',$id_q);
  $this->db->where('id_a',($key + 1));
  $this->db->update('answers', $update_data);
}
0 голосов
/ 19 ноября 2018

Чтобы обновить вопрос: -

this->db->UPDATE('questions', array('question' => 'question_title'),array('id_q' => 1));

Чтобы обновить ответы: -

Сначала удалите все ответыс идентификатором вопроса 1

$this->db->delete('answers',array('id_q' => 1));

, затем повторно вставьте все ответы с идентификатором вопроса 1

<?php 

$answers = $this->input->post('answers');
$insert_data = array();
for($answers as $key => $value){
  $row['id_q'] = 1;
  $row['answer'] = $value;
  array_push($insert_data, $row);
}
if(!empty($insert_data)){
    $this->db->insert_batch('answers',$insert_data); // will insert multiple rows
}

?>

Это будет работать на 100%.

0 голосов
/ 19 ноября 2018

Как я правильно понимаю ваш вопрос.Я думаю, что вы хотите

this->db->SELECT('*');
this->db->FROM('answers');
this->db->WHERE('answers.id_q', $x); // $x -> variable that has the id o the selected question
this->db->WHERE('answers.id_a', $rightAnswerId);
this->db->UPDATE('answers', $data);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...