2017-03-01 45 views
0

I'm做一個查詢MySQL的加入空值

SELECT ROUND((SUM(refracciones.total)+(serviciosrealizados.total)),2) 
FROM refracciones, serviciosrealizados 
WHERE refracciones.id_ticket = '$idticket' AND serviciosrealizados.id_ticket = '$idticket' 

2表:

  1. refracciones
  2. serviciosrealizados

2列:

  1. refracciones.total
  2. serviciosrealizados.total

在查詢工作的時刻,但只是如果我插入在這兩個表中的數據。

我會想查詢顯示我總refracciones.total + serviciosrealizados.total,如果其中一個字段是空的節目我總有refracciones.total或serviciosrealizados.total

+0

**警告**:儘可能使用**預準備語句**以避免在查詢中注入任意數據並創建[SQL注入漏洞](http://bobby-tables.com/)。這些在['mysqli'](http://php.net/manual/en/mysqli.quickstart.prepared-statements.php)和[PDO](http://php.net/manual/)中很簡單en/pdo.prepared-statements.php)其中任何用戶提供的數據都是用'?'或':name'指示符指定的,後者使用'bind_param'或'execute'填充,具體取決於您使用的是哪一個。 – tadman

回答

1

比如說,如果ID 5僅在服務器實例中,此查詢應該執行您想要的操作:

SELECT ROUND(SUM(IFNULL(r.total, 0)) + IFNULL(s.total, 0), 2) 
FROM refracciones r 
    LEFT OUTER JOIN serviciosrealizados s ON r.id_ticket = s.id_ticket 
WHERE r.id_ticket = 5 
UNION 
SELECT ROUND(SUM(IFNULL(r.total, 0)) + IFNULL(s.total, 0), 2) 
FROM refracciones r 
    RIGHT OUTER JOIN serviciosrealizados s ON r.id_ticket = s.id_ticket 
WHERE s.id_ticket = 5; 

您可能不得不忽略任何空行。

這是一個SQLFiddle作爲演示。

如果可能,您可能希望查看數據庫設計,因爲它看起來很尷尬。

+0

你是上帝,非常感謝你! –

+0

不客氣! @AlexRey –

+0

ouch我測試如果總結只是「servicios」,並不工作,如果我不插入數據在refracciones :( –