使用表格显示所有记录,其中某些值大于X

时间:2019-04-25 20:56:50

标签: php sql database

对于这个问题,我需要制作一个PHP页面,用户可以在其中输入“数量”值来搜索发票表。然后,表格会提取该数量,并在数量超过用户提交数量的所有发票上显示一个表格,其中包含名称,发票编号,数量和项目说明。

在大多数情况下,我的页面都已设置好并且工作正常。卡住的地方是查询方面-具体来说,以下代码为我提供了数量与输入数量相同的发票清单。

我尝试更改“ WHERE ii.quantity LIKE?”。到“ WHERE ii.quantity>?”但所做的只是为我提供所有发票的列表,而无需按用户提交的数量进行过滤。

    $query = 
    "SELECT c.first_name, c.last_name, ii.invoice_id, ii.quantity, it.description
     FROM `c2092`.`customer` c
     JOIN `c2092`.`invoice` i ON c.customer_id = i.customer_id
     JOIN `c2092`.`invoice_item` ii ON ii.invoice_id = i.invoice_id
     JOIN `c2092`.`item` it ON it.item_id = ii.item_id
     WHERE ii.quantity LIKE ?
     ORDER BY ii.invoice_id";

2 个答案:

答案 0 :(得分:0)

你好

您的变量的值是什么?

更喜欢使用命名参数而不是?语法。

答案 1 :(得分:0)

这是太复杂的查询。尝试对此做出解释。我确定它将使用文件排序,甚至使用临时表。

更好的方法是进行几个查询:

$invoiceItems = $db->query(
"SELECT ii.invoice_id, ii.id, ii.quantity, it.description
 FROM `c2092`.`invoice_item` ii
 JOIN `c2092`.`item` it ON it.item_id = ii.item_id
 WHERE ii.quantity > ?
 ORDER BY ii.invoice_id");

$invoiceItemMap = [];
$invoiceIds = [];
foreach ($invoiceItems as $invoiceItem) {
   $invoiceItemMap[$invoiceItem['invoice_id']][] = $invoiceItem;
   $invoiceIds[$invoiceItem['invoice_id']] = $invoiceItem['invoice_id'];
}
$invoiceIds = array_values($invoiceIds);

$userInvoices = $db->query(
"SELECT c.first_name, c.last_name, i.invoice_id
 FROM `c2092`.`invoice` i
 JOIN `c2092`.`customer` c ON c.customer_id = i.customer_id
 WHERE i.id IN (".implode(',', $invoiceIds).")");

$result = [];
foreach ($userInvoices as $row) {
  $result[] = array_merge($row, $invoiceIds[$row['invoice_id']]);
}