2013-05-30 38 views
-1

我想寫一個選擇查詢,我用戶必須通過兩個輸入ID和SourceID。 但這裏是扭曲的,輸入ID是Mandetory,SourceID是可選的。 我想寫一個選擇查詢,如果用戶只通過輸入ID,那麼我的選擇查詢將根據ID過濾數據,但如果用戶同時通過ID和SourceID,則用戶應該基於兩個過濾器獲取數據。 我是非常新的數據庫查詢,所以我無法弄清楚如何做到這一點?如何在MySQL中編寫選擇查詢?

我的請求體:

<body> 
<p:GetEntryByID xmlns:p="http://abcFarm.org/"> 
    <!--Exactly 1 occurrence--> 
    <xs:ExistingID xmlns:xs="http://abcFarm.org/">?</xs:ExistingID> 
    <!--0 to 1 occurrence--> 
    <xs:TargetSourceID xmlns:xs="http://abcFarm.org/">?</xs:TargetSourceID> 
</p:GetEntryByID > 
</body> 

我寫這不工作的SQL查詢:

select * from entry WHERE ID='ID1' AND (e.SourceID='SourceID1' Or ID='ID1'); 

但這不履行我的上述需求。 請幫忙。提前感謝。

+0

這並沒有太多意義。你能提供一個預期的輸入和輸出的例子嗎? – symcbean

回答

4

試試這個,

SELECT * 
FROM entry 
WHERE ID = 'ID1' AND 
     SourceID = COALESCE('SourceID1', SourceID) 

它的意思是,當NULLSourceID1通過後,將與SourceID列比較的值是列本身的價值。

+0

但是,這隻給我數據,只有當我傳遞ID和SourceID,如果我只發送ID然後這個查詢失敗:( – Roy

+0

如果你只想通過'ID'來過濾,你需要傳遞'NULL'而不是'SourceID1'。 –

+0

我通過null,但它不工作:( – Roy

0
$id = "Your_ID1"; 
$SourceID1 = "Your_SourceID1"; 

if($id){ 
    $query = "select * from entry WHERE ID=$id"; 

    if($SourceID1){ 
     $query .= " AND SourceID = $SourceID1"; 
    } 
    $query .= ";"; 
} 
+0

沒有人對PHP說什麼;) – cypherabe