Full outer join in MySql
You need to first CROSS JOIN the two tables, list_of_dates and post_categories and then LEFT JOIN posts:

SELECT 
    ld.date     AS date, 
    pc.name     AS categoryName, 
    COUNT(p.id) AS postCount 
FROM 
    ( SELECT 
          DATE_ADD('2016-12-28', INTERVAL seq.seq DAY) AS date 
      FROM 
          seq_0_to_999 AS seq 
      WHERE 
          DATE_ADD('2016-12-28', INTERVAL seq.seq DAY) &lt;= '2017-03-28' 
    ) AS ld                   -- list_of_dates 
CROSS JOIN
    post_categories AS pc     -- list_of_categories 
LEFT JOIN 
    posts AS p
  ON  p.user_id = 65 
  AND p.created_at &gt;= ld.date AND p.created_at &lt; ld.date + INTERVAL 1 DAY
  AND p.category_id = pc.id 
GROUP BY 
    ld.date, 
    pc.id, pc.name 
ORDER BY
    ld.date ASC ;