pasha52 пишет: как я понял то поля title, name, year должны в обеих таблицах совпадать
Количество и порядок полей всех запросов, объединяемых union, должно совпадать.
Классический обходной манёвр, если поле есть только в одной из таблиц - указать в других таблицах вместо поля любую удобную для последующей обработки константу:
CODE (
SQL):
скопировать код в буфер обмена
(SELECT title, name, year, firma FROM knigi WHERE author ='$author')
UNION ALL
(SELECT title, name, year, NULL AS firma FROM gurnal WHERE author ='$author')
ORDER BY year
Тот же фокус используется, чтобы разбирать из какого запроса какой результат пришёл: