Попробуйте использовать UNION
:
SELECT * FROM (
SELECT A.col1 AS x, A.col2 As y, A.col3 AS date FROM tableA A
WHERE tableA.poster_id = $id
UNION
SELECT B.colA AS x, B.colB AS y, B.colC AS date FROM tableB B
WHERE tableB.receiver_id = $id
)
ORDER BY date DESC
LIMIT 0, 20
ИЛИ, если вы хотите сохранить дубликаты между таблицей A и таблицей B, используйте UNION ALL
.
РЕДАКТИРОВАТЬ, согласно вашим комментариям, я понимаю, что вам нужен столбец, указывающий, из какой таблицы эта строка. Вы можете просто добавить статический столбец в выборку, например так:
SELECT * FROM (
SELECT A.col1 AS x, A.col2 As y, A.col3 AS date, 'A' as source FROM tableA A
WHERE tableA.poster_id = $id
UNION
SELECT B.colA AS x, B.colB AS y, B.colC AS date, 'B' as source FROM tableB B
WHERE tableB.receiver_id = $id
)
ORDER BY date DESC
LIMIT 0, 20
Это дает вам хорошую таблицу в следующей форме:
x y date source
=========================
(v1) (v2) (d1) 'A'
(v3) (v4) (d2) 'B'
(v1) (v2) (d3) 'B'
(v3) (v4) (d4) 'A'
Это делает то, что вы хотите, не так ли? Немного трудно понять, чего вы на самом деле пытаетесь достичь с помощью этого ...