2014-09-24 108 views
0

我有一個查詢,看起來像這樣:選擇日期

SELECT * 
FROM produit 
WHERE year(date_commande) = '.$date.' 
ORDER BY num_serie_produit desc; 

哪裏$date = 2014。 但是這個變量可以具有所有的值,所以這意味着我需要選擇所有的產品。 我知道我可以做第二次查詢這樣解決我的問題:

SELECT * 
FROM produit 
ORDER BY num_serie_produit desc; 

但我想知道如果我可以只使用一個查詢,並與$日期玩。

我想是這樣的:

if ($date == "all"){ 
    $date = '%%'; 
} 

,但它不會改變任何東西:/

那麼,這可能嗎?

回答

1

但是這個變量可以擁有所有的價值,

如果$date == "all",然後運行一個不同的查詢,沒有WHERE條款。

$sql = "SELECT * 
     FROM produit 
     ". ($date == "all" ? "WHERE year(date_commande) = ".$date : "") ." 
     ORDER BY num_serie_produit desc;"; 

我的問題是:「是否有可能只用一個查詢和使用$ date變量玩嗎?」

的種類。只需構建不同的查詢(僅在$date的值爲「all」時包含WHERE子句)。這可能是更好的解決問題的方法,而不是使用SQL IF()語句或其他方式, D是通過更多的功能到MySQL不是在需要的時候,雖然是一個小的「開銷」我認爲應該避免

+0

當我說「所有」,這意味着我需要選擇所有年份的行,我試過你的代碼,它返回的行數相同 – 2014-09-24 08:21:23

+0

啊,好吧!你沒有標記PHP,但我假設你使用的是PHP,對吧? – 2014-09-24 08:22:30

+0

是的,sorr我使用PHP。 – 2014-09-24 08:25:14

0

例如:

WHERE "'.$date.'" IN (year(date_commande), "all")