allow me to point out that this here is your first SELECT in the UNION query --
SELECT pm.id, r.recipient_read_on AS read_on, pm.sender_id,...
WHERE pm.id = 90
AND read_on = -1
GROUP BY (pm.id)
so if the "read_on" alias to the "r.recipient_read_on" column is either NULL or has a DATE, why are you forcing it to be -1 ????
I guess to eliminate that record.
Since I have two records that are nearly identical (see earlier example), if I wanted the PM that was SENT, then the above code would eliminate it.
And the corresponding code for the second query should leave me with just the SENT PM.
I admit, that this is sorta loopy. (Dare I say, that I am somewhat regretting how I "normalized" my PM's...)
I think it is better - as David hinted to - that I have two queries for a Deleted Message: One if it is a Deleted incoming, and a second if it is a Deleted Sent.
Now that I am appending "s" or "i" to my query string, I have the ability to know whether the request is for one or the other, and so my UNION query is probably no longer needed.
But as I said above, if I needed to do what I asked in my OP, how could you do it?