2012-01-27 38 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

FOUND_ROWSの使い方(に関連する報告bug)があります。したがって、返される行数には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未満でも動作しますが、この回答はうまくいきません。非常に難解です –

+0

エラーはありません。If文に入りません。最初の選択に何も見つからない場合は、2番目の選択を返します。 rowCountが1より大きい値の値を返した場合 –

+0

これ以上見ると、見つかった行の値が1より大きい値を返さなければなりません。私はDB id 1と2にそれぞれ2つだけを記録しています。私は(0,2)を渡す場合、私はデフォルトとしてレコード2を返す必要がありますが、それは –