2015-01-28 9 views
0

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

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

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

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

+0

в Аяксе только общая цена будет пропущена ... – Steve

+0

добавить '$ всего = 0;' перед циклом в то время, и '$ общих + = $ row ['price']; 'в цикле. – FirePanther

+2

Я думаю, это слишком сложно, и никто не хочет прикасаться к нему! – Steve

ответ

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