Mysql选择条件无法正常工作的查询

时间:2014-10-29 06:44:59

标签: php mysql

我有两张桌子的销售和收据,表格结构如下。

促销表

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
?>

任何机构都会针对这些问题提供解决方案吗?

2 个答案:

答案 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'

等条件进行SQL注入

答案 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中轻松生成以上查询。请让我进一步澄清。