私が達成したいのは、テーブル内のすべての不足しているIDのレコードセットを返すストアドプロシージャです。たとえば :そこに処理することができ、複数のテーブルがあるので、私はメンテナンスを必要とするだけで1つのストアドプロシージャを持っていると、そうであろうと変数テーブル名を持つMySQLストアドプロシージャと不足しているレコードの取得
----------
| result |
----------
| 3 |
| 4 |
| 6 |
| 7 |
| 8 |
| 9 |
----------
注:
--------------------
| games |
--------------------
| id | game name |
--------------------
| 1 | first game |
| 2 | second game |
| 5 | fifth game |
| 10 | tenth game |
-------------------
これが生じるはずですテーブル名は動的に追加する必要があります。
私はストアドプロシージャのプリペアドステートメント、パラメータ、ループに関するチュートリアルをいくつか見つけましたが、その組み合わせは動作しません。
Iを適用する心を持っているロジックは次のとおりです。
- は、テーブルをテーブル内の
- ループの最高のIDを取得していない場合、イテレータはID
- として存在しているかどうかを確認、
このに行われルーピング後に結果セットを結果セットに追加して、戻ることは、私がこれまでに得たものである:
CREATE DEFINER=`root`@`localhost` PROCEDURE `get_missing_ids`(IN in_kind varchar(15), OUT out_result int)
BEGIN
DECLARE highest_id INT;
DECLARE i INT;
DECLARE check_id INT;
SET @highestid = CONCAT("(CALL get_highest_id('", in_kind, "',@id)");
PREPARE stmt1 FROM @highestid;
SET highest_id = (EXECUTE stmt1);
WHILE i < highest_id DO
SET @checkid = CONCAT("SELECT COUNT(*) FROM ", in_kind, " WHERE id = ", i, ")");
PREPARE stmt2 FROM @checkid;
SET check_id = (EXECUTE stmt2);
IF check_id = 0 THEN
SELECT i;
END IF;
END WHILE;
END
私はこのコンボをどのように機能させることができますか?
あなたがこれまでに – Drew
を持っていない私はここので、それに – Drew
@Drewをしてください私の仕様ですので、オフトピックとして、この質問を閉じるために投票しています何、私は現在、十分な – stijnpiron