Query trong SQL sẽ nhận được giá trị trả về dạng gì?
Hi mọi người, mình không làm SQL nhiều nên đọc tới câu truy vấn này bị khó hiểu quá.
sqlcounter max-total-dl-octets {
counter-name = max-total-dl-octets
check-name = Max-Input-Octets
reply-name = ChilliSpot-Max-Input-Octets
sqlmod-inst = sql
key = User-Name
reset = never
query = "SELECT IFNULL(SUM(AcctInputOctets), 0) FROM radacct WHERE UserName='%{%k}'"
}
Query này nó sẽ lưu được giá trị gì? Mình đoán nếu điều kiện nó thỏa, thì nó sẽ trả về true, ngược lại false. hoặc các giá trị tượng tự.
Câu query này dùng để kiểm tra xem người dùng có đạt tới ngưỡng download hay chưa.
Và đây không phải là SQL 100%, cái này là kết hợp giữa một script và SQL. Mình hi vọng có ai đó thể giúp mình đoán được kết quả trả về.
Bổ sung thêm đoạn code sử dụng sqlcounter: max-total-dl-octets
max-total-dl-octets {
reject = 1
}
if (reject) {
update reply {
Reply-Message := "You have reached your total download limit"
}
ok = reject
}
E nghĩ là tính tổng các AcctInputOctets nếu không tồn tại thì set =0 trong bảng
radacct
where …Kết quả sễ trả về 1 bảng
n
dòng, 1 cột mang giá trị Sum(AcctInputOctets ) nếu không có dòng nào thỏa điều kiệnWhere
thì trả về 0Là một recordset, bao gồm 0, 1 hay nhiều row kết quả.
Query ở trên là một recordset, có một row, một column có giá trị là tổng của các cột
AcctInputOctets
của user trong format; nếu ko có user nào thì row sẽ bị NULL nênIFNULL()
sẽ trả về 0 thay vìNULL
.Cụ thể là như thế nào Tuấn. Câu trả lời của em rất logic Anh đang nghiên cứu freeradius, nó sử dụng cái này để tính dung lượng download từ một user. Nhưng SQL + script của nó lạ quá.
Nếu trả về 0 thì có nghĩa là đã đạt đến ngưỡng hay chưa đến ngưỡng vậy anh? Ý em là đoán ấy, vì em không hiểu lắm về câu lệnh này nên hơi choáng.
P/S: Đã thêm đoạn script sử dụng
max-total-dl-octets
.@tuancoi2506 và @laptrinhio có thể gợi ý một cái tên phù hợp cho topic này không?
@ltd nếu không dùng
IFNULL
thì trường hợp mà ko có user nào tìm thấy đúng như trong format kia thì kết quả sẽ bịNULL
; màquery
trả vềNULL
chắc là không hợp lý khi sử dụng, vì code mong muốn nhận một giá trị là số. Vậy sử dụngIFNULL
để khi mà kết quả làNULL
từSELECT
thì sẽ trả về 0. Chỉ là logicif-else
bình thường thôi.e ngĩ có chỉ =0 trong 2 TH:
Th1: user đó chưa download lần nào
Th2" không tồn tại user thỏa điều kiện (chứa dấu {
'trong này fai chứa chữ k'
})Điều kiện này chắc không hợp lý đâu. Vì khi mới kết nối vào mạng là đã download ngay. nên điều kiện này không phù hợp.
cái này cũng lạ nữa, vì username mà có chữ k thì lạ quá, Anh có thể tạo account với tên bất kỳ.
Select ra thử thì ra cái này.
Lời giải thích của mọi người đã làm rõ điều này.
P/S: Tên không cần có chữ k nhé, anh nghĩ đó là một cái biến, tên sẽ được truyền vào %k
E nhìn ý nghĩa câu lệnh để đọc thôi a, còn e cũng k hiểu ý nó làm vậy làm chi
Cảm ơn mọi người, câu trả lời của @laptrinhio và @tuancoi2506 đã phần nào giải đáp được thắc mắc của mình. Mình tiếp tục cày đây