I'm using this code:
SELECT *
  FROM admins, vips
  WHERE admins.Expired < CURDATE() + INTERVAL 3 DAY
    AND vips.Expired < CURDATE() + INTERVAL 3 DAY
I have 2 rows in first and 2 rows in second. But I only getting 2 rows in "vips" table. Why?
I'm using this code:
SELECT *
  FROM admins, vips
  WHERE admins.Expired < CURDATE() + INTERVAL 3 DAY
    AND vips.Expired < CURDATE() + INTERVAL 3 DAY
I have 2 rows in first and 2 rows in second. But I only getting 2 rows in "vips" table. Why?
Try specifying the * for both tables, like this:
SELECT admins.*, vips.*
FROM admins, vips
WHERE admins.Expired < CURDATE() + INTERVAL 3 DAY
AND vips.Expired < CURDATE() + INTERVAL 3 DAY
EDIT: The answer above isn't going to help, you need a UNION SELECT:
SELECT * 
FROM (SELECT * FROM vips
    UNION
    SELECT * FROM admins) derivedTable       -- this is an alias of the subquery
WHERE Expired < CURDATE() + INTERVAL 3 DAY
 
    
    