сортировка массива php mysql

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

Это основной прайс-лист:

$sql = "SELECT * FROM price_list WHERE id='1'";
$query = mysql_query($sql) or die ('Error: ' . mysql_error());
$num_rows = mysql_num_rows($query);
$data = array();
while( $row = mysql_fetch_array( $query ) )
{
$t_name = $row['name'];
$t_price = $row['price'];

$t_array[] = array( "name" => $t_name, "price" => $t_price );
}

Это заказ клиента в MySQL:

$sql = "SELECT * FROM order WHERE id='1'";
$query = mysql_query($sql) or die ('Error: ' . mysql_error());
$num_rows = mysql_num_rows($query);
while( $row = mysql_fetch_array( $query ) )
{
$pants = $row['pants'];
$shirt = $row['shirt'];
$hat = $row['hat'];
}

и если это я повторяю выше, это будет выглядеть так:
синий джинс, черные брюки,
белая рубашка (X2), красная рубашка,
черная шляпа, серая шляпа

(X2) не существует в прайс-листе, и я должен сопоставить белую рубашку в прайс-листе, а затем умножить ее на 2.
Это (X2) может быть динамически изменено на любой другой элемент, в зависимости от порядка.
Кроме того, в результате я бы хотел, чтобы цена на брюки и шляпу (а не на рубашку) воспроизводилась с помощью переменной типа $discount, который может иметь учетную ставку.

Я должен отметить, что этот заказ прошел через jquery, и поэтому php не знает об общей цене.

0

Решение

Вы можете получить эту информацию с помощью одного запроса, используя оператор JOIN.
Но чтобы полностью охватить ваш вопрос (даже удаленно), достаточно охватить более широкие темы (слишком большие и широкие, чтобы на них можно было ответить). И поэтому я просто оставлю вам отдельный пример, чтобы побудить вас глубже вникнуть в некоторые темы …. (например, структура таблиц / индексов далеко не близка к «готовым к производству»)

sscce:

<?php
$pdo = new PDO('mysql:host=localhost;dbname=test;charset=utf8', 'localonly', 'localonly');
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
setup($pdo);

$stmt = $pdo->query('
SELECT
p.name, p.price, o.qty
FROM
soFooOrderItems as o
JOIN
soFooPriceList as p
ON
o.itemid = p.itemid
WHERE
o.orderid = 1
');

$total = 0;
foreach( $stmt as $row ) {
$subtotal = bcmul($row['qty'], $row['price'], 2);
printf("%s (%d pcs) | %s per pc. | %s\r\n",
$row['name'],
$row['qty'],
$row['price'],
$subtotal
);
$total = bcadd($total, $subtotal, 2);
}
echo 'total: ', $total;function setup($pdo) {
$queries = array(
'
CREATE TEMPORARY TABLE soFooPriceList (
itemid INT,
name varchar(32),
price Decimal(6,2)
)
',
'
CREATE TEMPORARY TABLE soFooOrderItems (
orderid int,
itemid  int,
qty int
)
',
"INSERT INTO soFooPriceList (itemid, name, price) VALUES (1, 'blue jeans', 2.0), (2, 'Disruptor MkIII', 870.5), (3, 'black pants', 1.4), (4, 'Emergency Transport Beacon', 600.75), (5, 'white shirt', 1.0)",
"INSERT INTO soFooOrderItems (orderid,itemid, qty) VALUES
(1,1,1), (1,3,2), (1,5,1),
(2,2,1), (2,4,1), (2,1,1)
",
);
foreach( $queries as $q ) {
$pdo->exec($q);
}
}

печать

blue jeans (1 pcs) | 2.00 per pc. | 2.00
black pants (2 pcs) | 1.40 per pc. | 2.80
white shirt (1 pcs) | 1.00 per pc. | 1.00
total: 5.80
0

Другие решения

Других решений пока нет …