There are several ways of approaching this at a database level that don't include having to put the data from two tables into one. Unfortunately, most won't work on MySQL:
Use a union query:
SELECT COUNT(rnum) as rcnt FROM pending_listings WHERE rnum='123456' UNION
SELECT COUNT(rnum) as rcnt FROM approved_listings WHERE rnum='123456'
Use a view on top of that union so you don't have to use that union all over the place:
create view pending_and_approved_listings as
SELECT COUNT(rnum) as rcnt FROM pending_listings WHERE rnum='123456' UNION
SELECT COUNT(rnum) as rcnt FROM approved_listings WHERE rnum='123456'
but the fastest way to do this, if you don't want to put it all in one table, or maybe even if you do, is to put all the available random numbers in the range in a third table. first create it and populate it with the numbers from 100001 to 988889, then use a delete query or something like it (I can't remember MySQL's goofy left jon syntax used to replace in() so I'll leave that as an exercise for you.
delete from available_listings where rnum in(select rnum from approved_listings);
delete from available_listings where rnum in(select rnum from pending_listings);
then each time you need a new one, you can grab it from the available_listings:
select count(*) from available_listings;
$max = result from above...
$rnd = random(1,$max);
select rnum for update from available_listings limit $rnd,1;
$todel = rnum from above
delete from available_listings where rnum=$todel;
and then go ahead and insert it.
This is a general methodology. I use postgresql so my SQL may be using features MySQL doesn't support, but for the where in() stuff there is definitely a section of the manual that covers replacing that with a join of some kind.