我有两张桌子的销售和收据,表格结构如下。
促销表
id total sale_type cust_id
1 100 credit 10
2 200 payment 9
收据
id net_mount payment_type cust_id
1 50 CDM 10
2 150 Hand Over 9
我的问题是当我在我得到的条件下给予sale_type 销售表中的匹配数据以及收据表中的数据, 当sale_type给出时,我只想要销售表的匹配值。 payment_type的情况相同。
代码
<?php
$where='where 1';
$where2='where 1';
if($sale_type<>'')
{
$where.=" and sale.sale_type='$sale_type'";
}
if($deposited_type<>'')
{
$where2.=" and receipt.deposited_type='$deposited_type'";
}
if($cust_name<>'' || $cust_id<>'')
{
$where.=" and (sale.cust_id='$cust_name' or sale.cust_id='$cust_id')";
$where2.=" and (receipt.cust_id='$cust_name'
or receipt.cust_id='$cust_id')";
}
select total, net_amount from (select total, null as net_amount,
2 as sort_col from sale $where union
all select
null as total, net_amount, 1 as sort_col from receipt $where2)
as a order by sort_col desc
?>
任何机构都会针对这些问题提供解决方案吗?
答案 0 :(得分:0)
查询的FROM
部分必须根据您需要的表进行参数化。
你必须做这样的事情:
<?php
$where='where 1';
$where2='where 1';
if ($sale_type<>'' && $deposited_type<>'') {
$where.=" and sale.sale_type='$sale_type'";
$where2.=" and receipt.deposited_type='$deposited_type'";
$tables = "sales INNER JOIN receipt ON sales.cust_id. = receipt.cust_id"
}
else if($sale_type<>'') {
$where.=" and sale.sale_type='$sale_type'";
$tables = "sales"
}
else if($deposited_type<>'') {
$where2.=" and receipt.deposited_type='$deposited_type'";
$tables = "receipt"
}
然后使用以下命令构建查询:
SELECT ...
FROM $tables
WHERE conditions with $where and $where2
注意使用receipt.deposited_type='$deposited_type'
答案 1 :(得分:0)
如果客户不止一个,我认为您的数据库结构是错误的 销售查询将生成重复结果
请创建如下所示的数据库结构
sale(id,total,sale_type,cust_id)
receipt(id,net_mount,payment_type,sale_id)
在上表中,您可以将sale_id放在收据表中而不是cust_id
所以查询将是
select sale.total,receipt.net_amount,receipt.payment_type from sale INNER JOIN
receipt ON sale.id=receipt.sale_id where sale.sale_type='credit'
您可以在php中轻松生成以上查询。请让我进一步澄清。