Skip to main content

Setup bảng tạm trong CSDL

Mỗi bảng tạm yêu cầu phải có 4 cột sau (nếu dùng mọi option default):

Cột Kiểu Mục đích
RowCondition JSON (trong mariadb là LONGTEXT) Lưu phần where trong query, sử dụng 
ItemID VARCHAR/CHAR Dùng default làm id của từng hàng, không nhất thiết phải làm PRIMARY KEY nếu có ý định viết id động
ParentID VARCHAR/CHAR Dùng để xác định hàng cha của hàng con. Nếu không dùng các tính năng như sum tổng, 
Static TINYINT (1/0) Dùng để xác định các hàng có lấy dữ liệu từ bảng dữ liệu không

Đối với điều kiện cột hoặc viết trực tiếp điều kiện IF() trong các cột I1, I2, ... hoặc dùng ColumnConditions trong ReportFrame (có thể phối hợp với BeforeQuery)

RowCondition

Cột RowCondition hay còn gọi là điều kiện hàng, quyết định câu lệnh where cũng như 1 số thủ tục/phép toán trên bảng. Trước hết nó phải chuẩn đúng theo dạng JSON, nó xây dựng câu lệnh where giống với Mongoose (nhưng nên nhớ rằng bản chất của nó không phải là Mongoose). Cú pháp của nó thường là như sau:

{
  "<tên-cột>": {
    "$<toán-tử>": <giá-trị>
  },
  //các điều kiện khác
}

Thí dụ chẳng hạn: để xây câu lệnh WHERE Age >= 18 AND Country = "USA", Ta viết như sau:

{
   "Age": {
     "$gte": 18
   },
   "Country": {
     "$eq": "USA"
   }
}

Trong trường hợp của dấu '=', ta có thể bỏ "$eq" đi, do đó, câu lệnh trên có thể viết gọn thành

{
   "Age": {
     "$gte": 18
   },
   "Country": "USA"
}

Lưu ý: Các <tên-cột> đều lấy từ bảng dữ liệu, hãy rất cẩn thận khi viết tên cột từ bảng dữ liệu sang!

Hiện tại, chúng ta đang hỗ trợ các phép toán tử sau:

Toán tử Yêu cầu giá trị VD Câu lệnh sinh ra Note
$eq Số/Xâu WHERE AGE = val
$gte Số/Xâu WHERE AGE >= val
$lte Số/Xâu WHERE AGE <= val
$lt Số/Xâu WHERE AGE < val
$gt Số/Xâu WHERE AGE > val
$ne Số/Xâu WHERE AGE != val
$in Mảng giá trị WHERE AGE IN (1, 2, 3, ...)
$nin Mảng giá trị WHERE AGE NOT IN (1, 2, 3, ...)
$like Xâu WHERE AGE LIKE '%cond%'
$regex Xâu WHERE AGE REGEXP 'cond'
$exists Số (1/0) WHERE AGE IS NOT NULL Nếu giá trị = 1 thì yêu cầu cột khác null, 0 thì ngược lại 
$lein3 Mảng giá trị WHERE LEFT(AGE, 3) IN (1, 2, 3, ..) Bởi nhiều truy vấn yêu cầu tài khoản/khoản mục kiểm tra bắt đầu với abcxyz, các câu lệnh ở dưới đây được viết ngắn trc
$lein4 Mảng giá trị WHERE LEFT(AGE, 4) IN (1, 2, 3, ..)
$nlein3 Mảng giá trị WHERE LEFT(AGE, 3) NOT IN (1, 2, 3, ..)
$nlein4 Mảng giá trị WHERE LEFT(AGE, 4) NOT IN (1, 2, 3, ..)

Để có thể thêm các phép toán logic như OR hoặc NOT, Cú pháp của nó như sau:

{
  "$or": {
    //các điều kiện 1 (cond-1)
  },
  "$not": {
    //các điều kiện 2 (cond-2)
  },
  "$and": {
    //các điều kiện 3 (cond-3)
  }
}

Mặc định nếu không viết gì, thì điều kiện sẽ là AND, như vậy, câu lệnh trên sẽ được viết như sau:

WHERE (<cond-1> OR <cond-1> OR ...) AND NOT (<cond-2> ... ) AND (<cond-3> AND ....)