对于这个问题,我需要制作一个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";
答案 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']]);
}