Skip to content

Commit

Permalink
fix: changed mysql version to lts, also added a few queries
Browse files Browse the repository at this point in the history
  • Loading branch information
iamtheted committed Jan 25, 2025
1 parent 5afa9e3 commit 4104317
Show file tree
Hide file tree
Showing 2 changed files with 66 additions and 4 deletions.
62 changes: 62 additions & 0 deletions marzban/fa/examples/mysql-queries.md
Original file line number Diff line number Diff line change
Expand Up @@ -171,6 +171,36 @@ ORDER BY total_used_traffic DESC;
جای عدد `100` عدد نود آیدی را از تیبل `nodes` پیدا کرده و جایگزین کنید.
:::

- مجموع حجم‌های تعیین شده توسط ادمین‌ها بر حسب ترابایت
```sql
SELECT admins.username, SUM(users.data_limit) / 1099511627776 AS total_data_limit_tb
FROM users
LEFT JOIN admins ON users.admin_id = admins.id
GROUP BY admins.username;
```

- مجموع حجم‌های تعیین شده توسط ادمین‌ها بر حسب گیگابایت
```sql
SELECT admins.username, SUM(users.data_limit) / 1073741824 AS total_data_limit_gb
FROM users
LEFT JOIN admins ON users.admin_id = admins.id
GROUP BY admins.username;
```

- کاربرهایی که محدودیت زمان ندارند
```sql
SELECT id, username
FROM users
WHERE expire IS NULL;
```

- کاربرهایی که محدودیت حجم ندارند
```sql
SELECT id, username
FROM users
WHERE data_limit IS NULL;
```

## اسکریپت های کاربردی SQL
اسکریپت های `SQL` بر خلاف کوئری ها به جای خروجی دادن به شما در دیتابیس تغییر ایجاد می‌کنند.

Expand All @@ -180,6 +210,10 @@ UPDATE users SET users.admin_id = 3
WHERE users.admin_id = 6;
```

::: tip نکته
در نمونه بالا کاربران ادمینی که آیدی او در تیبل دیتابیس 6 هست به ادمینی که آیدی او 3 هست منتقل شده است.
:::

- غیر فعال کردن تمام کاربران یک ادمین خاص
```sql
UPDATE users SET users.status= 'disabled'
Expand Down Expand Up @@ -488,6 +522,34 @@ END //
DELIMITER ;
```

```sql
DELIMITER //

CREATE TRIGGER Limit_Admin_TotalData_Update
BEFORE UPDATE ON users
FOR EACH ROW
BEGIN
    DECLARE total_data_limit BIGINT;

    -- Calculate the total data limit of all users created by the admin
    SELECT SUM(data_limit) INTO total_data_limit
    FROM users
    WHERE admin_id = 1;

    -- Check if the total data limit exceeds or equals 1 TB
    IF total_data_limit >= (1 * 1024 * 1024 * 1024 * 1024) THEN
        SIGNAL SQLSTATE '45000'
        SET MESSAGE_TEXT = 'Admin has reached the total data limit.';
    END IF;
END //

DELIMITER ;
```

::: tip نکته
تریگر اول برای ایجاد محدودیت هنگام ساخت کاربر و تریگر دوم برای ایجاد محدودیت هنگام ویرایش هست، در نتیجه اگر قصد دارید برای ادمین محدودیت حجم بگذارید، لازم است هر دو تریگر را متناسب با میزان محدودیت دلخواه وارد کنید.
:::

::: tip نکته
این تریگر حجم معین شده را برای ادمین موردنظر محدود می‌کند نه حجم مصرفی، به این معنا که جمع کل حجم تعیین شده برای کاربرهای ادمین باید کمتر یا مساوی با لیمیت تعیین شده توسط شما باشد. حجم پیش فرض در تریگر 1 ترابایت تعیین شده که با تغییر عدد 1 می‌توانید آن را تغییر دهید.
:::
Expand Down
8 changes: 4 additions & 4 deletions marzban/fa/examples/mysql.md
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ services:
- mysql
mysql:
image: mysql:latest
image: mysql:lts
restart: always
env_file: .env
network_mode: host
Expand Down Expand Up @@ -81,7 +81,7 @@ services:
- mysql
mysql:
image: mysql:latest
image: mysql:lts
restart: always
env_file: .env
network_mode: host
Expand Down Expand Up @@ -245,7 +245,7 @@ services:
- mysql
mysql:
image: mysql:latest
image: mysql:lts
restart: always
env_file: .env
network_mode: host
Expand Down Expand Up @@ -326,7 +326,7 @@ services:
- mysql
mysql:
image: mysql:latest
image: mysql:lts
restart: always
env_file: .env
network_mode: host
Expand Down

0 comments on commit 4104317

Please sign in to comment.