#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