Cita:
Iniciado por gnzsoloyo
Amount es evidentemente un campo de la tabla ORDERS, y "PARTIAL" un valor que puede contener el campo order_status.
Por su lado, los campos empezados con "ship" hacen referencia al destinatario del pedido.
En realidad no se puede sacar ninguna conclusión útil de esta consulta ni de esta tabla sin saber a qué sistema comercial pertenece (amount es el valor total o suma de algo, y order_status evidentemente un campo de control que indica el estado del pedido), ya que se trata de algo diseñado para un propósito definido.
¿Qué es en realidad lo que andabas buscando?
Es verdad , no me había fijado en lo de amount, amount es entonces la cantidad total de precio de un pedido. Order_status, hace referencia al estado del pedido , que supongo que será para comprobar si se ha tramitado aun o no.
el sistema hace referencia a una tienda de online. y la tabla orders es donde se almacenan los datos de pedidos.
lo que no entiendo muy bien es porque hace lo siguiente para consultar el orderid:
Código PHP:
amount > (" . $_SESSION['total_price'] . "-.001) and
amount < (" . $_SESSION['total_price'] . "+.001)
pudiendo hacerlo así directamente:
Código PHP:
amount = '". $_SESSION['total_price']."'
$_SESSION['total_price'] es el precio total del carrito de compra que se almacena en una variable de sesion
pongo todo el script completo de la función que inserta los datos de un pedido en la BD
Código PHP:
function insert_order($order_details)
{
// extract order_details out as variables
// extraer los detalles del pedido como variables
extract($order_details);
// set shipping address same as address
// configura dirección de envío igual que dirección
if ((!$ship_name) && (!$ship_address) && (!$ship_city) && (!$ship_state) && (!$ship_zip) &&
(!$ship_country)) {
$ship_name = $name;
$ship_address = $address;
$ship_city = $city;
$ship_state = $state;
$ship_zip = $zip;
$ship_country = $country;
}
$conn = db_connect();
// we want to insert the order as a transaction
// start one by turning off autocommit
// queremos insertar el pedido como una transaccion
// comenzar primero por poner a off autocommit
// Un COMMIT significa que los cambios hechos en la transacción actual
// se convierten en permanentes y se vuelven visibles para los otros usuarios.
// Una sentencia SQL COMMIT o ROLLBACK termina la transacción vigente y
// comienza una nueva. Ambas sentencias liberan todos los bloqueos InnoDB
// que se establecieron durante la transacción vigente.
$conn->autocommit(false);
// insert customer address
// insertar dirección personalizada
// datos del comprador se consultan, customerid
$query = "select customerid from customers where
name = '" . $name . "' and address = '" . $address . "'
and city = '" . $city . "' and state = '" . $state . "'
and zip = '" . $zip . "' and country = '" . $country . "'";
$result = $conn->query($query);
if ($result->num_rows > 0) {
$customer = $result->fetch_object();
$customerid = $customer->customerid;
} else {
// datos del comprador se introducen
$query = "insert into customers values
('', '" . $name . "','" . $address . "','" . $city . "','" . $state .
"','" . $zip . "','" . $country . "')";
$result = $conn->query($query);
if (!$result) {
return false;
}
}
// insert_id — Retorna el id autogenerado en la ultima consulta.
$customerid = $conn->insert_id;
$date = date("Y-m-d");
// se introducen los datos del pedido
$query = "insert into orders values
('', '" . $customerid . "', '" . $_SESSION['total_price'] . "', '" .
$date . "', '" . PARTIAL . "',
'" . $ship_name . "', '" . $ship_address . "', '" . $ship_city .
"', '" . $ship_state . "',
'" . $ship_zip . "', '" . $ship_country . "')";
$result = $conn->query($query);
if (!$result) {
return false;
}
// orders es donde van almacenados los datos del pedido y el precio total de la compra
// se consulta el orderid del pedido del cliente para introducirlo el order_items
$query = "select orderid from orders where
customerid = '" . $customerid . "' and
amount > (" . $_SESSION['total_price'] . "-.001) and
amount < (" . $_SESSION['total_price'] . "+.001) and
date = '" . $date . "' and
order_status = 'PARTIAL' and
ship_name = '" . $ship_name . "' and
ship_address = '" . $ship_address . "' and
ship_city = '" . $ship_city . "' and
ship_state = '" . $ship_state . "' and
ship_zip = '" . $ship_zip . "' and
ship_country = '" . $ship_country . "'";
$result = $conn->query($query);
if ($result->num_rows > 0) {
$order = $result->fetch_object();
$orderid = $order->orderid;
} else {
return false;
}
// insert each book
// order_items es donde se almacenan los datos de los articulos de un pedido , unidades, precio, isbn
// primero se borra de esa tabla los datos de un id de pedido igual al nuevo pedido con ese mismo libro
// despues se almacena los nuevos datos.
foreach ($_SESSION['cart'] as $isbn => $quantity) {
$detail = get_book_details($isbn);
$query = "delete from order_items where
orderid = '" . $orderid . "' and isbn = '" . $isbn . "'";
$result = $conn->query($query);
$query = "insert into order_items values
('" . $orderid . "', '" . $isbn . "', " . $detail['price'] . ", " . $quantity . ")";
$result = $conn->query($query);
if (!$result) {
return false;
}
}
// end transaction
$conn->commit();
$conn->autocommit(true);
return $orderid;
}
y aqui la BD:
Código PHP:
create database book_sc DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
use book_sc;
create table customers
(
customerid int unsigned not null auto_increment primary key,
name char(60) not null,
address char(80) not null,
city char(30) not null,
state char(20),
zip char(10),
country char(20) not null
)
type=InnoDB
DEFAULT CHARACTER SET utf8
COLLATE utf8_general_ci
;
create table orders
(
orderid int unsigned not null auto_increment primary key,
customerid int unsigned not null,
amount float(6,2),
date date not null,
order_status char(10),
ship_name char(60) not null,
ship_address char(80) not null,
ship_city char(30) not null,
ship_state char(20),
ship_zip char(10),
ship_country char(20) not null
)
type=InnoDB
DEFAULT CHARACTER SET utf8
COLLATE utf8_general_ci
;
create table books
(
isbn char(13) not null primary key,
author char(80),
title char(100),
catid int unsigned,
price float(4,2) not null,
description varchar(255)
)
type=InnoDB
DEFAULT CHARACTER SET utf8
COLLATE utf8_general_ci
;
create table categories
(
catid int unsigned not null auto_increment primary key,
catname char(60) not null
)
type=InnoDB
DEFAULT CHARACTER SET utf8
COLLATE utf8_general_ci
;
create table order_items
(
orderid int unsigned not null,
isbn char(13) not null,
item_price float(4,2) not null,
quantity tinyint unsigned not null,
primary key (orderid, isbn)
)
type=InnoDB
DEFAULT CHARACTER SET utf8
COLLATE utf8_general_ci
;
create table admin
(
username char(16) not null primary key,
password char(40) not null
)
type=InnoDB
DEFAULT CHARACTER SET utf8
COLLATE utf8_general_ci
;
grant select, insert, update, delete
on book_sc.*
to book_sc@localhost identified by 'password';
saludos