讓報表完蛋去,超簡單的方法完成任務

2021-09-01 01:17:03 字數 3858 閱讀 6507

代價總是會有的,不是開發快就是效率低。如果你在收到類似於這類任務

本頁顯示所有等級段內的人數

等級h府

g房f場

e場d場

c營b營

a營i館

j院k倉

l倉m集

1-10

10-20

20-30

30-40 5

6 78 9

10 …

至100

表結構:

idlevel

buildid (建築型別)

uid在我想到這個點子的時候不是為了解決上面這個查詢,而是為了解決一堆這樣的查詢。

本來是以為用一些表示式來做,但是實際上我發現按照如下的方法更直觀,沒有任何學習成本。

如果你發現結果和你預想的不同。那麼久斷點下,看看生成的sql是否是正確的。這裡有乙個拼接sql字串的東西。

當你還在想破腦筋為了這些無聊的東西發愁的時候,有這麼一小段**幫你偷工減料。

1、構造乙個result物件

public class result
2、result result = new result();

result.select.add(new string );

result.select.add(new string );

result.select.add(new string );

result.select.add(new string );

result.select.add(new string );

result.select.add(new string );

result.select.add(new string );

result.select.add(new string );

result.select.add(new string );

result.select.add(new string );

result.select.add(new string );

result.select.add(new string );

result.select.add(new string );

result.group.add(new string );

result.group.add(new string );

result.group.add(new string );

result.group.add(new string );

result.group.add(new string );

result.group.add(new string );

result.group.add(new string );

result.group.add(new string );

result.group.add(new string );

result.group.add(new string );

listusers = playermng.findbyhql("from user where name = '"

+ username + "'");

if (users.size() != 0)

3、select!

public list parserhql(result result) 

for (string where : result.where)

sql += groupsql;

list l = dao.findbyhql(sql);

if (l != null && l.size() > 0)

// map.put(sarr[0], obj);

arr[i] = obj;

i++;

}list.add(arr);

} return list;

}

構造result 物件的時候別看字多,邏輯非常簡單。不用去想什麼sql怎麼寫。

groop list儲存的是y軸條件,

where list 儲存的是總條件。如查詢uid為***的 這個報表

select list 儲存的是顯示內容和查詢sql(主)

陣列第0個元素為顯示內容,第乙個元素為sql的條件。 這個條件會替換掉x軸sql裡面的 ? 

如果x軸是帶group的sql  並且還有總條件那麼需要用#代替。

如果想order一下,這個功能還沒加。不過也就是根據最終的list 排序而已。

如果想分頁?我覺得這類查詢不需要分頁。

如果想優化效能?當然可以,毫無疑問雖然寫了那麼多。實際上乙個結果集中大概80%的查詢內容是可以從同乙個sql結果集中取出結果。每合併乙個查詢結果會減少y軸數量 個查詢 ~

這裡只是拋磚引玉,只適合存在y軸條件的查詢。如果你優化的足夠好,就像上面說的那樣合併查詢內容。實際上和你去搗鼓sql的效果一樣。一般是不需要分頁的,排序更不是問題。

原理就是 y軸條件+x軸條件 一定是單一值,然後寫個程式迴圈下 再把結果拼起來。

---再貼幾個實現。

本頁顯示對應等級的數量,以及擁有對應等級的人數 

等級數量

人數一級

二級**

四級五級

六級七級

八級九級

result result = new result();

result.select.add(new string );

result.select.add(new string );

result.group.add(new string );

result.group.add(new string );

result.group.add(new string );

result.group.add(new string );

result.group.add(new string );

result.group.add(new string );

result.group.add(new string );

result.group.add(new string );

result.group.add(new string );

再更新乙個。。。這個本來不想用這種方法的。。但是突然開始頭痛。。。分頁方式示例。讓分頁、排序也成浮雲。

result result = new result();

result.select

.add(new string );

result.select

.add(new string );

result.select

.add(new string );

pagination pagination2 = mallmng

.findbysql(

"select date_format(record_time, '%y-%m') from t_gold_record group by date_format(record_time, '%y-%m') desc",

pageno, getcookiecount());

for (object obj : pagination2.getlist()) );

} list list = mallmng.parsersql(result);

vf

表結構id

type

numuid

record_time

這次呢,沒有y軸了,表面上看起來沒有y軸 實際上y軸大家心裡都知道了。就是record_time 的月份 y軸由一段查詢結果構成,因為這段結果是分頁的,相當於整個報表也是分頁的!同時y軸排序=對整個報表排序。

Android ADB超簡單的安裝方法

1.先檢查adb是否可以使用了。不能則開始安裝。開啟命令提示符 windows開始鍵 r 輸入cmd 後確認 輸入adb,如果出現一大串的東西,那就行,要不然它會告訴你不是內部或外部命令,也是不可執行的程式或批處理檔案。2.找到adb的存放路徑就行。as2.2以後一般存在於sdk的platform ...

陣列去重的簡單方法

set物件允許你儲存任何型別的唯一值,無論是原始值或者是物件引用。function removerepeatelement arr 注意 要用array.from 來將set物件轉換成乙個真的陣列。function removerepeatelement arr 遍歷源陣列,判斷新陣列中有沒有源陣列...

陣列去重的幾種簡單方法

今天學習一下陣列去重的幾種方法,雖然不全但是實用 方法一 let arr 1 2,3 5,4 8,8 4,8 8,2 2 function chuanru arr return newarr console.log chuanru arr script 使用了push與indexof進行去重 pus...