Php
強制條目數
我的標題可能不是最好的,但基本上我有一個儲存主機、漏洞發現參考和狀態的表。我正在嘗試查詢這些,但是在沒有條目的情況下,我想強制它向我顯示狀態的預設值。這是一個例子……
SELECT f.host_id, f.`status` FROM findings f WHERE f.finding_id = 1 AND f.host_id IN (1,2,3)
因此,如果有 1 和 2 的條目,但沒有 3,我將需要 3 的條目,但預設狀態值為“無數據”。
射線
編輯:
我試圖避免進行 3 次查詢,因為我可能在該列表中有幾十個主機,這將是一個主要的性能損失!
您可以使用包含這 3 個值的(派生)表來執行此操作,然後將
LEFT
其連接到findings
:SELECT d.host_id, CASE WHEN f.host_id IS NOT NULL THEN f.status ELSE 'No Data' END AS status FROM ( SELECT 1 AS host_id UNION ALL SELECT 2 UNION ALL SELECT 3 ) AS d LEFT JOIN findings AS f ON f.finding_id = 1 AND f.host_id = d.host_id ;
如果該
findings.status
列不可為空,則可以將 替換CASE ... END
為更簡單的:COALESCE(f.status, 'No data') AS status
如果你有一張
hosts
表(和大量的ID要檢查),派生表也可以簡化:... FROM ( SELECT host_id FROM hosts WHERE host_id IN (1,2,3) ) AS d LEFT JOIN ...