2012-01-27 96 views
1

我正在運行一個存儲過程。這個問題似乎是它會進入if語句。同樣由於某種原因,無論我使用多少選擇它只會返回第一個。我已經從另一個存儲過程複製了這個像魅力一樣的存儲過程,但是這個不會去。有任何想法嗎?Mysql存儲過程多選擇

DROP PROCEDURE IF EXISTS genSelPriceTier; 
DELIMITER $$ 
CREATE PROCEDURE genSelPriceTier(tier_id INT, default_id INT) 
    BEGIN 
     DECLARE rowCount INT DEFAULT 0; 
      SELECT * FROM price_tier WHERE price_tier_id = tier_id; 
      SET rowCount = FOUND_ROWS(); 
     IF rowCount < 1 THEN 
      SELECT * FROM price_tier WHERE price_tier_id = default_id; 
      END IF; 
    END$$ 
DELIMITER ; 

回答

1

有一個bug報告與FOUND_ROWS()的用法有關。所以,我建議使用Count(*)作爲返回的行數。像下面這樣的東西應該工作。

DROP PROCEDURE IF EXISTS genSelPriceTier; 
DELIMITER $$ 
CREATE PROCEDURE genSelPriceTier(tier_id INT, default_id INT) 
    BEGIN 
     DECLARE rowCount INT DEFAULT 0; 
      SELECT COUNT(*) INTO rowCount FROM price_tier WHERE price_tier_id = tier_id 
     IF rowCount < 1 THEN 
      SELECT * FROM price_tier WHERE price_tier_id = default_id; 
      END IF; 
    END$$ 
DELIMITER ; 
+0

是的certianly小於1或rowCount = 0會工作,但遺憾的是說這個答案也不起作用。非常困惑 – 2012-01-27 19:41:09

+0

沒有錯誤,它只是不進入If語句並返回第二個選擇,如果在第一個選擇中沒有找到任何內容。如果rowCount返回的值小於1 – 2012-01-27 19:47:58

+0

查看它,它必須在找到的行中返回高於1的值。我只在數據庫標識1和2中分別記錄了2。所以如果我通過(0,2)我應該返回記錄2作爲默認值,但它不會 – 2012-01-27 19:50:44