Buongiorno a tutti

Ho una query SQL che è piuttosto complessa, e non si comporta come vorrei... vorrei sapere dove sbaglio.
Innanzitutto spiego:
Devo unire due SELECT, ognuna di queste SELECT ha due JOIN su altre tabelle, e va raggruppata in base a un campo.
Alla fine, vorrei ordinare i risultati in base al valore di uno dei campi presenti nelle tabelle joinate (è lo stesso campo).
Sembra che il problema sia il GROUP BY: prende per ogni id un record a caso, e quindi alla fine non mi ritrovo più con l'ordinamento...

Ecco la query:
codice:
(
	SELECT
		users_cats.catid,
		users_cats.cat_title,
		users_cats.siteurl,
		users_subscribedcats.userid,
		users_subscribedcats.catid,
		users_subscribedcats.in_sitecats,
		users_arts.date,
		users_arts.artid,
		users_arts.artlink,
		users_arts.arttitle,
		users_arts.text,
		users_arts.author
	FROM
		users_subscribedcats

	LEFT JOIN
		users_cats
	ON users_subscribedcats.catid = users_cats.catid

	LEFT JOIN
		users_arts
	ON users_cats.catid = users_arts.catid

	WHERE users_subscribedcats.userid = $userid
	AND users_subscribedcats.in_sitecats =0
	GROUP BY users_subscribedcats.catid

) UNION (

	SELECT
		cats.catid,
		cats.cat_title,
		cats.siteurl,
		users_subscribedcats.userid,
		users_subscribedcats.catid,
		users_subscribedcats.in_sitecats,
		arts.date,
		arts.artid,
		arts.artlink,
		arts.arttitle,
		arts.text, 
		arts.author
	FROM
		arts

	LEFT JOIN
		cats
	ON users_subscribedcats.catid = cats.catid

	LEFT JOIN
		users_subscribedcats
	ON users_subscribedcats.catid = arts.catid

	WHERE users_subscribedcats.userid = $userid
	AND users_subscribedcats.in_sitecats =1
	GROUP BY arts.catid
)

ORDER BY date DESC LIMIT 20
Sono sicuro che c'è un errore concettuale, più che di distrazione, ma non riesco a capire qual è... nemmeno con l'aiuto del manuale.

Mi dareste una mano, per cortesia?