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

0

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

Это основной прейскурант:

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

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

  • 0
    в ajax будет проходить только полная цена ...
  • 0
    добавьте $total = 0; перед циклом while и $total += $row['price']; в петле.
Показать ещё 4 комментария
Теги:
arraylist
sorting

1 ответ

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
    VolkerK, спасибо за ваше руководство и пример кода! Я пытался сделать это множеством разных способов, которые, само собой разумеется, не сработали ... Я попробую это и надеюсь, что это сработает.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню