Как добавить значения из нескольких кортежей в базу данных MySQL и получить их с помощью php-кода?

У меня есть две таблицы базы данных

     1. graduate_survey
     G_id(pk),PO1,PO2

     2. Alumni_survey
     A_id(pk),PO1,PO2

Предположим, я вставил значения в обе таблицы. Теперь мне нужно добавить значения PO1, PO2 из опроса выпускников с PO1, PO2 опроса выпускников. Как добавить их с помощью запроса MySQL? И как сохранить новое значение в другой таблице с помощью php?


person Debasish Choudhury    schedule 20.05.2017    source источник
comment
Приведите пример. Неясно, хотите ли вы добавить значения из определенных строк с определенным отношением или все из обеих таблиц.   -  person Todor Simeonov    schedule 21.05.2017
comment
я должен добавить все из обеих таблиц. Предположим, PO1 и PO2 из опроса выпускников имеют значения 80 и 90, а PO1 и PO2 из опроса выпускников имеют значения 70,80... Мне нужно добавить PO1 из опроса выпускников с PO1 из опроса выпускников и ту же процедуру в случае PO2.   -  person Debasish Choudhury    schedule 21.05.2017
comment
@DebasishChoudhury Чтение в соединениях mysql dev.mysql.com/doc/refman/ 5.7/en/join.html и оператор сложения stackoverflow.com/questions/12387061/, и тогда вы сможете делать то, что хотите. Для части PHP. Просто прочитайте о соединениях с базой данных PHP и о том, как запускать запросы. См. php.net/manual/de/book.pdo.php.   -  person Xatenev    schedule 21.05.2017


Ответы (2)


SELECT SUM(t.P01) AS total_P01, SUM(t.P02) AS total_P02
    FROM (SELECT P01, P02 FROM graduate_survey
          UNION ALL
          SELECT P01, P02 FROM Alumni_survey) t

Это работает. На основе: Как я могу суммировать столбцы по нескольким таблицам в MySQL? Я не помечаю его как дубликат, потому что ресурс предназначен для одного значения, а здесь два.

Добавление результатов типа DECIMAL(10,6) из 2 реальных таблиц с 18 000 + 57 000 записей, выполнение запроса занимает около 0,15 с.

Часть 2: ВСТАВИТЬ

Предполагая, что ваша новая таблица имеет AUTO INCREMENT на T_id (pk), и вы получили предыдущий результат с mysql_fetch_assoc() в $row:

$query_string = "INSERT INTO Total_survey 
 SET P01 = '".floatval($row['total_P01'])."', 
 P02 = '".floatval($row['total_P02'])."' ";
  • или intval(), если ваши результаты являются целыми числами.

Изменить: для 3 таблиц:

SELECT SUM(t.P01) AS total_P01, SUM(t.P02) AS total_P02
    FROM (SELECT P01, P02 FROM graduate_survey
          UNION ALL
          SELECT P01, P02 FROM Alumni_survey
          UNION ALL
          SELECT P01, P02 FROM faculty_survey) t

Но я не думаю, что это хорошая идея. У вас есть таблицы с одинаковой структурой, содержащие похожие данные. Лучшим подходом было бы сделать еще 1 столбец в одной таблице и написать для каждой записи, это для выпускников, выпускников или факультетов. Наличие 3 отдельных таблиц для этой работы просто делает вашу структуру базы данных трудной для понимания и использования. Вы можете сделать эти две таблицы:

Survey: id(pk), group_id(int), PO1, PO2

и таблица описания:

Groups: group_id(pk), group_name(varchar)

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

person Todor Simeonov    schedule 20.05.2017
comment
После добавления, когда мы получим новые значения PO1 и PO2, можем ли мы сохранить новое значение PO1 и PO2 в другой таблице, например, Total_survey (T_id (pk), PO1, PO2)? - person Debasish Choudhury; 21.05.2017
comment
Если я хочу получить результат из трех таблиц, скажем, еще одну таблицу факультет_опрос, где f_id (pk), PO1, PO2, то как это сделать? - person Debasish Choudhury; 21.05.2017
comment
после добавления мне нужно среднее значение, а затем я должен сохранить его в другой таблице total_survey. как это сделать? - person Debasish Choudhury; 23.05.2017

Использование PDO-соединения:

$sql = 'SELECT gs.G_id G_id, as_.A_id A_id, (gs.PO1 + gs.PO2 + as_.PO1 + as_.PO2) total from graduate_survey gs, Alumni_survey as_';
$stmt = $conn->prepare('INSERT INTO table_name(G_id, A_id, total) VALUES(?, ?, ?)');
$conn->beginTransaction();
foreach ($conn->query($sql) as $row) {
   $stmt->bindValue(1, $row['G_id'], PDO::PARAM_INT);
   $stmt->bindValue(2, $row['A_id'], PDO::PARAM_INT);
   $stmt->bindValue(3, $row['total'], PDO::PARAM_INT);
   $stmt->execute();
}
$stmt->commit();
person Oluwafemi Sule    schedule 20.05.2017