2015-09-08 58 views
1

我想弄清楚是否有可能獲得一個記錄,如果有價值,否則抓住最後一條記錄。按價值獲得記錄或獲取最後一條記錄

if (!empty($version)) { 
    $sql = "SELECT `version` FROM `versioning` WHERE `id`='$itemID' AND `version`='$version' ORDER BY `version` DESC LIMIT 1"; 
}else{ 
    $sql = "SELECT `version` FROM `versioning` WHERE `id`='$itemID' ORDER BY `version` DESC LIMIT 1"; 
} 

我的問題是::是否有辦法在一個sql語句來做到這一點,如果有,會是什麼我不使用if聲明類似下面現在有一個解決方案在一個聲明中做它的利弊?

爲了幫助澄清 我試圖找出是否有可能使用一個sql語句而不是一個if語句獲取或者指定version或者version是空的,我想獲得最後versionversioning表。

+0

*如果版本爲空* ..您的意思是變量'$ version'? – Rahul

+0

我的意思是變量。 –

回答

1

是的,你可以用一條線通過一個SQL做到像下面

$version = (!empty($version))?$version:'%%'; 
$sql = "SELECT `version` FROM `versioning` WHERE `id`='$itemID' AND `version` LIKE '$version' ORDER BY `version` DESC LIMIT 1"; 

,如果你想更改SQL條件或添加更多的字段或添加其他語句組合也可以是有用的 ,,,這一切,你不必修改兩個SQL線

+0

你知道我總是用這個簡短的陳述。我甚至從來沒有想過將它用於此解決方案。這是一個很好的答案。我試圖把它歸結爲一個SQL的原因之一是我不得不繼續回去編輯它,我忘了編輯第二個。 –

+0

我實際上是通過使行讀取'$ sql =「SELECT'version'從'snippet_version' WHERE'snippet_id' ='$ snippetID'AND'version'像'%$ version%'ORDER BY'version' DESC LIMIT 1「;'如果'$ version'爲空,這也是有效的。它刪除了短'if'語句的需要。 –

+1

偉大的hhhhh我沒有想到這一點 –

0

可能沒有使用ANSI SQL語句,但您可以在您的應用程序代碼中使用存儲過程,雖然傳遞的參數,並調用該程序,而不是像

create procedure usp_version (version varchar(10)) 
as 
begin 
if version is not null then 
SELECT `version` FROM `versioning` 
WHERE `id`='$itemID' 
AND `version`='$version' 
ORDER BY `version` DESC 
LIMIT 1; 
else 
SELECT `version` 
FROM `versioning` 
WHERE `id`='$itemID' 
ORDER BY `version` DESC 
LIMIT 1; 
end if; 
end