亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

用于檢查現有記錄的 sql 查詢

用于檢查現有記錄的 sql 查詢

瀟湘沐 2022-09-21 17:30:54
我有以下格式的數據: HashMap<PageID, Set<SubscriberIDS>>我需要檢查的是MySQL表中已經不存在每個表中的數量。表具有 和 列。SubscriberIDSPageIDsPageIDSubscriberID這就是我到目前為止所擁有的:String NEW_SUBSCRIBER_COUNT = "SELECT ? - COUNT(*) as new_subscribers from FB_SUBSCRIPTIONS WHERE PAGEID=? AND SUBSCRIBERID IN (?)";第一個參數是,第二個參數是第三個參數numberOFSubscriberIDsPageIdSubscriberIds但這需要為每個頁面Id打一個。我如何修改它以使用單個查詢為每個提供我。number of new subscribersPageID
查看完整描述

1 回答

?
www說

TA貢獻1775條經驗 獲得超8個贊

是否有任何特定需要在一個查詢中執行此操作?因為雖然可以,但實際上使用原始解決方案并調用每個頁面 ID 的查詢可能更具可讀性。無論如何,你想要的東西不能在一行中完成,所以你需要期望在給定的點循環。


// Build dynamic query


StringBuilder whereClause = new StringBuilder();

Iterator<PageID> it = yourMap.keySet().iterator();

while(it.hasNext()){

  PageID key = it.next();

  Set<SubscriberIDS> value = yourMap.get(key);


  // You need to fill the 'IN' clause with multiple parameters, one for each subscriber id

  StringBuilder inClause = new StringBuilder();

  for(SubscriberIDS subId : value){

    if(inClause.length > 0){

      inClause.append(", ");

    }

    inClause.append("?");


    preparedStatement.setInt(paramIndex++, subId.getId());

  }


  // For each page id we append a new 'OR' to our query

  if(whereClause.lenght > 0){

    whereClause.append(" OR ");

  }

  whereClause.append("(PAGEID=? AND SUBSCRIBERID IN (").append(inClause.toString()).append("))");

}


String query = "SELECT PAGEID, COUNT(SUBSCRIBERID) AS SUBSCRIBERS FROM FB_SUBSCRIPTIONS WHERE " + whereClause.toString() + " GROUP BY PAGEID";


// Create prepared statement and set parameters


PreparedStatement preparedStatement = connection.prepareStatement(query);

int paramIndex = 0;

it = yourMap.keySet().iterator();

while(it.hasNext()){

  PageID key = it.next();

  Set<SubscriberIDS> value = yourMap.get(key);


  preparedStatement.setInt(paramIndex++, key.getId());


  for(SubscriberIDS subId : value){

    preparedStatement.setInt(paramIndex++, subId.getId());

  }

}


// Execute query, loop over result and calculate new subscriptions


ResultSet rs = preparedStatement.executeQuery();


while(rs.next()){

  int pageId = rs.getInt("PAGEID");

  int newSubscriptions = yourMap.get(pageId).size() - rs.getInt("SUBSCRIBERS");

  System.out.println(pageId + ", " + newSubscriptions);

}

在地圖中給定以下數據:


PAGEID  SUBSCRIBERIDS

1   1,3,4,5,9

2   3,4,5,6,8,9

3   2,5,6

以及數據庫中的以下數據:


PAGEID  SUBSCRIBERIDS

1   3,4,10,11

2   1,2,5,7

3   1,2,5,6,7,8,9

這應該給出以下輸出:


1,3

2,6

3,0

我實際上還沒有運行代碼,所以它可能需要一些調整,但它給了你一般的想法......


查看完整回答
反對 回復 2022-09-21
  • 1 回答
  • 0 關注
  • 120 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號