I am working on PHP. My question is How can restrict a user can upload only three images in a month.
My Mysql Database table --
CREATE TABLE `images`
Consider the following...
CREATE TABLE my_table
(id SERIAL PRIMARY KEY
,user_id INT NOT NULL
,date DATE NOT NULL
);
INSERT INTO my_table (user_id,date)
SELECT 1
, '2018-01-01'
FROM (SELECT 1) x
LEFT
JOIN (SELECT user_id
, DATE_FORMAT(date,'%Y-%m') ym
FROM my_table
GROUP
BY user_id
, ym
HAVING COUNT(*) >=3
) y
ON y.user_id = 1
AND y.ym = DATE_FORMAT('2018-01-01','%Y-%m')
WHERE y.user_id IS NULL;
LIMIT 1;
SELECT * FROM my_table;
+----+---------+------------+
| id | user_id | date |
+----+---------+------------+
| 1 | 1 | 2018-01-01 |
+----+---------+------------+
INSERT INTO my_table (user_id,date)
SELECT 1
, '2018-01-02'
FROM (SELECT 1) x
LEFT
JOIN (SELECT user_id
, DATE_FORMAT(date,'%Y-%m') ym
FROM my_table
GROUP
BY user_id
, ym
HAVING COUNT(*) >=3
) y
ON y.user_id = 1
AND y.ym = DATE_FORMAT('2018-01-02','%Y-%m')
WHERE y.user_id IS NULL
LIMIT 1;
SELECT * FROM my_table;
+----+---------+------------+
| id | user_id | date |
+----+---------+------------+
| 1 | 1 | 2018-01-01 |
| 2 | 1 | 2018-01-02 |
+----+---------+------------+
INSERT INTO my_table (user_id,date)
SELECT 1
, '2018-01-02'
FROM (SELECT 1) x
LEFT
JOIN (SELECT user_id
, DATE_FORMAT(date,'%Y-%m') ym
FROM my_table
GROUP
BY user_id
, ym
HAVING COUNT(*) >=3
) y
ON y.user_id = 1
AND y.ym = DATE_FORMAT('2018-01-02','%Y-%m')
WHERE y.user_id IS NULL
LIMIT 1;
Query OK, 1 row affected (0.00 sec)
SELECT * FROM my_table;
+----+---------+------------+
| id | user_id | date |
+----+---------+------------+
| 1 | 1 | 2018-01-01 |
| 2 | 1 | 2018-01-02 |
| 3 | 1 | 2018-01-02 |
+----+---------+------------+
INSERT INTO my_table (user_id,date)
SELECT 1
, '2018-01-03'
FROM (SELECT 1) x
LEFT
JOIN (SELECT user_id
, DATE_FORMAT(date,'%Y-%m') ym
FROM my_table
GROUP
BY user_id
, ym
HAVING COUNT(*) >=3
) y
ON y.user_id = 1
AND y.ym = DATE_FORMAT('2018-01-03','%Y-%m')
WHERE y.user_id IS NULL
LIMIT 1;
Query OK, 0 rows affected (0.00 sec)
SELECT * FROM my_table;
+----+---------+------------+
| id | user_id | date |
+----+---------+------------+
| 1 | 1 | 2018-01-01 |
| 2 | 1 | 2018-01-02 |
| 3 | 1 | 2018-01-02 |
+----+---------+------------+
INSERT INTO my_table (user_id,date)
SELECT 1
, '2018-02-03'
FROM (SELECT 1) x
LEFT
JOIN (SELECT user_id
, DATE_FORMAT(date,'%Y-%m') ym
FROM my_table
GROUP
BY user_id
, ym
HAVING COUNT(*) >=3
) y
ON y.user_id = 1
AND y.ym = DATE_FORMAT('2018-02-03','%Y-%m')
WHERE y.user_id IS NULL
LIMIT 1;
Query OK, 1 row affected (0.00 sec)
SELECT * FROM my_table;
+----+---------+------------+
| id | user_id | date |
+----+---------+------------+
| 1 | 1 | 2018-01-01 |
| 2 | 1 | 2018-01-02 |
| 3 | 1 | 2018-01-02 |
| 4 | 1 | 2018-02-03 |
+----+---------+------------+