2016-04-17 4 views
1

機能要求を処理するためにsqlを使用している機能要求Webアプリケーションを作成しています。 これは私のテーブルの見た目です。挿入されているものに基づいてSQL列の値をどのように優先順位付けしますか?

enter image description here

私が持っている "ID、タイトル、説明、クライアント、clientPriority、日付、およびなどを...

そう言うことができます "クライアント1" いくつかの機能のリクエストをしてまでclientPriorityを設定し、" 1次に翌日に戻って別の機能を要求し、優先順位を「1」に設定したいので、最初の機能は「1」で要求され、「2」にプッシュされなければなりません。これはsqlを使用していますか?もしそうなら、SQLテーブルでこれをどのように達成できますか?

私はPyth on sqlAlchemy。

+0

そう、SQLでそれを処理することが可能である - トリガーを使用するが、それはデータベースで扱うべきではありません。データベースを使用するプログラムで処理する必要があります –

+0

優先度の更新を実行する必要がありますか、最優先の行の下に表示する必要がありますか? –

+0

コメントありがとう@ j.kaspar Guys。私はそれが存在する場合に基づいて優先順位をプッシュする必要があります! –

答えて

1

よく1つのトランザクションで2つのクエリを実行する必要があります。

最初に優先度を移動する@priorityは、挿入する予定のものです(1または何でもよい)。以下では、スタック全体を移動することを前提としています。それは意味をなさないでしょう。移動したい場合は "="に変更してください。それは同じだ錬金術で

BEGIN TRANSACTION 

UPDATE tableName 
SET ClientPriority = ClientPriority + 1 
WHERE ClientPriority >= @priority 

INSERT INTO tableName (feature, priority) 
VALUES @feature, @priority 

COMMIT TRANSACTION 

だけ流暢 セッション=トランザクションあなたが良いそれを開いたらそう。 http://docs.sqlalchemy.org/en/latest/orm/session_transaction.html

tablename.update().where(ClientPriority>[email protected]). values(ClientPriority=ClientPriority+1) 
tablename.insert.values([email protected], [email protected]) 

ニール・パテルのコメントから、最終的な解決策として、トリガーを追加:

@event.listens_for(RequestedFeatures, 'before_insert') def receive_before_insert(mapper, connection, target): query = "UPDATE features SET clientPriority = (clientPriority + 1) WHERE client = '" query += target.client + "' AND clientPriority >= " + str(target.clientPriority) qr = session.execute(query) session.commit() 
+0

ありがとうございました。あなたはPythonを使ってSQLAlchemyでそれを行う方法を知っていますか? –

+0

SQLAlchemyのセッションはトランザクションなので、一度それを開くと良いです。 http://docs.sqlalchemy.org/en/latest/orm/session_transaction.html tablename.update()。where(ClientPriority> = @ priority)まで までのクエリ。値(ClientPriority = @ priority) tablename.insert.values(feature = @ feature、ClientPriority = @ priority) – Dmitriy

+0

これは優先順位の変更を処理しますか?したがって、優先度「1」のものが既に存在し、他の機能要求が優先度「1」である場合、前の優先度を「2」にプッシュするかどうかを言えますか? –

関連する問題