0

ユーザー テーブルと SMS サブスクリプション テーブルの 2 つのテーブルから読み取るデート アプリケーションがあります。

users テーブルには、サブスクライバーに関するすべての個人情報 (性別、名前、宗教、職業など) が含まれています。

サブスクリプション テーブルには、サブスクライバーがシステムから自動化されたテキストを受信する頻度があります。受信メールは基本的に異性の連絡先です。

私の質問はこれです。いつでも異性の連絡先の詳細をランダムに送信するクエリを生成するにはどうすればよいですか。

以下のコードは、ユーザーが開始したリクエストに対してのみクエリを実行します。特にユーザーが自分のリクエストを送信できなかった場合はいつでも、異性のランダムなテキストをユーザーに送信するクエリを組み込むことにもっと興味があります。よろしくお願いします!

public void ExecuteSubscriptions() {
/* 609 */     this.var_returnMessage = "";
/* 610 */     String text = "";
/* 611 */     SqlConn lConn = null;
/*     */     try
/*     */     {
/* 615 */       String queryTmp = "select abs(DATEDIFF(datelastsent, NOW())) as gapTime, phone, request, SubscriptionFrequency from  where abs(DATEDIFF(datelastsent, NOW())) > 0 ";
/* 616 */       lConn = new SqlConn(false, true);
/* 617 */       if ((lConn.sqlConnection != null) && (lConn.statement != null))
/*     */       {
/* 619 */         ResultSet rs = lConn.statement.executeQuery(queryTmp);
/*     */ 
/* 621 */         if (rs != null)
/*     */         {
/* 623 */           String value = "";
/*     */ 
/* 625 */           while (rs.next()) {
/* 626 */             value = rs.getString("SubscriptionFrequency").toUpperCase().substring(0, 2);
/* 627 */             String[] smsParts;
/*     */             smsParts = rs.getString("request").split("");
/* 628 */             this.var_sender = rs.getString("phone");
/* 629 */             int var_num = Integer.parseInt(value);
/* 630 */             if (Integer.parseInt(rs.getString("gapTime")) >= var_num) {
/* 631 */               if ((!GetResults(CreateRequestQuery(smsParts, RequestTypes.NEWRESULTSONLY))) && 
/* 632 */                 (!GetResults(CreateRequestQuery(smsParts, RequestTypes.MIXEDRESULTS)))) {
/* 633 */                 this.var_totalResultsForUser = 0;
/* 634 */                 this.var_returnMessage = "Dear Subscriber, at the moment there were no results matching your subscription criteria, try again later.";
/*     */               }
/*     */ 
/* 637 */               text = new StringBuilder().append("update subscriptions set datelastsent = NOW() where phone = '").append(rs.getString("phone")).append("' and request = '").append(rs.getString("request")).append("'").toString();
/*     */             }
/*     */ 
/*     */           }
/*     */ 
/*     */         }
/*     */ 
/* 645 */         if ((this.var_returnMessage != null) && 
/* 646 */           (EngineIgniter.SendMessage(this.var_sender, "KQ Solutions", this.var_returnMessage))) {
/* 647 */           this.var_dm.CreateEntity(text);
/*     */         }
/*     */       }
/*     */     }
/*     */     catch (Exception ex)
/*     */     {
/* 653 */       this.var_dm.LogError(ex.getMessage(), "GENERIC");
/*     */     }
/*     */   }
/*     */ 
4

1 に答える 1

0

「ランダムに」はおそらく最良の方法ではありません。x 時間テキスト メッセージを生成していないユーザーの一部をランダムに選択することができます。

たとえば、6 時間以内にテキストを受け取っていないランダムなユーザーを選択します。

使用している RDBMS については言及していませんが、クエリは次のようになります。

SELECT * from subscriptions where sex = (sex variable) and datelastsent < date_add (now(), interval - 6 hours) order by rand() limit 1 
于 2013-08-16T13:29:30.570 に答える