在我的sql数据库中,我有两个表,一个是Invoices,另一个表是invoiceitems。因此,我正在从发票(发票表)中获取客户详细信息以及发票项目(从发票项目表中)。 我的sql代码面临一个问题。如果发票在发票表中没有任何项目,则无法获取数据。
我想获取所有数据,包括如果发票项目表中的发票中没有项目。 在下面的sql代码中,仅生成发票的具有发票项目。 谁能帮我做到这一点?
$sql = "SELECT
a.cusName,
a.cusMob,
a.invoiceNo,
a.invoiceDate,
a.total_VAT,
a.bill_tot,
b.itemsName ,
b.rate,
b.amt_vat,
ROUND(b.amt_vat + b.amount, 2) as amount
FROM
invoices a,
invoice_items b
where
a.invoiceID=b.invoiceid
and a.invoiceDate between '$getfromdate' and '$gettodate'
and a.status IS NULL
order by
a.invoiceID desc";
答案 0 :(得分:3)
您应该尝试将SQL更改为较新的JOIN notation,因为它将使这种事情变得更加简单,然后可以使用LEFT JOIN来指示这是一个可选表...
SELECT a.cusName, a.cusMob, a.invoiceNo,
a.invoiceDate, a.total_VAT, a.bill_tot,
b.itemsName ,b.rate, b.amt_vat,
ROUND(b.amt_vat + b.amount, 2) as amount
FROM invoices a
LEFT JOIN invoice_items b ON a.invoiceID=b.invoiceid
WHERE a.invoiceDate between '$getfromdate' and '$gettodate'
and a.status IS NULL
order by a.invoiceID desc
我还建议您考虑使用prepared statements,因为它们有很多优点。
答案 1 :(得分:2)
如果invoice_items没有值时也要获得结果,则应使用左连接,如果为空
server {
listen 80 default_server;
listen [::]:80 default_server;
root /var/www/laravel/public;
index index.php index.html index.htm;
server_name dev-localserve.co;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass 127.0.0.1:9000;
}
location ~ /\.ht {
deny all;
}
}
您还应避免根据位置使用旧的隐式联接sinta,并使用显式联接sintax,还应让您使用左联接(外部联接)
您还应该避免在SQL代码中使用php var ..您有可能遭受sqlinjection ..为此,请查看您的数据库驱动程序中是否存在prpared语句和bindig参数