Как вставить несколько входных данных в одну и ту же строку, которые группируются по одним и тем же данным

#php #sql

Вопрос:

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

Таблица purchase_item выглядит следующим образом

ID идентификатор заказа имя продукта
1 10001 iPhoneX
2 10001 ipnone 12 Pro
3 10001 iPad
4 10002 Яблочная ручка
5 10002 Airpods
6 10002 Iphone 12 Pro Max

Это мой запрос для вставки приведенных выше данных

 $osql = "INSERT INTO `purchase_items`(`order_id`, `product_name`) VALUES ('$order_id',`$product_name` )";
 

Теперь я создал другую таблицу(receipt_table), в которую я хочу вставить вышеуказанные данные в группу. Кто-нибудь знает, как я могу это сделать?

я хочу, чтобы результат моей таблицы выглядел так:

ID идентификатор заказа
1 10001
2 10002

Я хочу сгруппировать свои данные с помощью «ВСТАВИТЬ В». Кто-нибудь знает, как я могу это сделать?

Ответ №1:

Не зная, какой диалект sql вы используете, но в sql server мы могли бы сделать так:

 INSERT INTO receipt_table(id, order_id)
select id, order_id
from purchase_items
group by id, order_id
 

Ответ №2:

 <?php
$purchased_item = [
  [10001, "iPhoneX"],
  [10001, "iPhone 12 Pro"],
  [10001, "iPad"],
  [10002, "Apple Pen"],
  [10002, "Airpods"],
  [10002, "iPhone 12 Pro Max"]
];

$servername = "localhost";
$username = "root"; //your user name
$password = ""; // your password here
$dbname = "myDB"; // database name

$conn = new mysqli($servername, $username, $password, $dbname);

$osql = "INSERT INTO `purchase_items`(`order_id`, `product_name`) VALUES (?,? )";
$ostmt = $conn->prepare($osql);
$isql = "INSERT INTO reciept_table(`id`, `order_id`) VALUES (?, ?)";
$istmt = $conn->prepare($isql);

$lastId = null; // to check id is entered or not
foreach ($purchased_item as $value) {
  $ostmt->bind_param("is", $value[0], $value[1]);
  $ostmt->execute();
  if ($lastId != $value[0]){
    $istmt->bind_param("i", $value[0]);
    $istmt->execute();
  }
  $lastId = $vlaue[0];
}
?>
 

Ответ №3:

вы можете просто использовать sql для вставки сгруппированных данных.и я предполагаю, что идентификатор receipt_table — это идентификатор auto_incremnt.

 insert into 
    receipt_table(order_id)
    select order_id from purchase_items 
    group by order_id;
 

Ответ №4:

Способ получения последнего вставленного идентификатора в MySQL таков $mysqli->insert_id .

 $mysqli = new mysqli($servername, $username, $password, $dbname);

$osql = "INSERT INTO `purchase_items`(`order_id`, `product_name`) VALUES (?, ?)";
$stmt = $mysqli->prepare($osql);
$stmt->bind_param("is", $order_id, $product_name);
$stmt->execute();

$id = $mysqli->insert_id;
$rsql = "INSERT INTO receipt_table (order_id) VALUES (?)";
$stmt = $conn->prepare($rsql);
$stmt->bind_param("i", $id);
$stmt->execute();
 

https://www.php.net/manual/en/mysqli.insert-id.php
https://www.w3schools.com/php/php_mysql_prepared_statements.asp