Я пытаюсь ВЫБРАТЬ из двух таблиц и ЗАКАЗАТЬ ПО дате (столбец, который есть у них обоих). В одной таблице (tableA) есть столбец с именем «A», а в другой таблице (tableB) есть столбец с именем «B», я использую array_key_exists(), чтобы различать их (если ключ «A» существует, я запускаю массив через FunctionA(), если ключ «B» существует, я запускаю массив через FunctionB()). Мне нужны только 20 последних (по дате) записей. Мне нужен SQL-запрос, чтобы выполнить это.
Я уже знаю, что ответ будет "если они имеют одинаковую структуру, тогда вам следует просто использовать одну таблицу", но я не хочу этого делать, потому что таблица A резко отличается от таблицы B (намного больше столбцов в таблице A), и использование одной таблицы для хранения данных приведет к МНОЖЕСТВУ пустых столбцов для записей, отформатированных для таблицы B, не говоря уже о том, что это будет очень уродливый формат таблицы из-за того, что таблица B не нуждается в большинстве столбцов таблицы A).
Я просто хочу отображать данные из обеих таблиц в упорядоченном (по дате) режиме и в одном потоке.
Между прочим, мне нужно ВЫБРАТЬ, ГДЕ tableA.poster_id = $id и tableB.receiver_id = $id.
РЕШЕНИЕ:
Я обновляю это на всякий случай, если кто-то еще с той же дилеммой придет. После реализации SQL-запроса, который любезно предоставил мне @Erik A. Brandstadmoen, в основном мой код получился таким:
$MySQL->SQL("SELECT * FROM
(SELECT A.id AS id, A.date AS date, 'tableA' AS source
FROM tableA A WHERE A.poster_id = $id
UNION
SELECT B.id AS id, B.date AS date, 'tableB' AS source
FROM tableB B WHERE B.receiver_id = $id) AS T
ORDER BY T.date DESC LIMIT 0, 20");
$GetStream = array();
$i = 0;
while ($row = mysql_fetch_array($MySQL->Result))
{
$GetStream[$i]['id'] = $row['id'];
$GetStream[$i]['date']=$row['date'];
$GetStream[$i]['source'] = $row['source'];
$i++;
}
*** later on down the code ***
$i = 0;
while ($i<count($GetStream))
{
if ($GetStream[$i]['source'] == "tableA")
{
FunctionA($GetStream[$i]);
}
else
{
FunctionB($GetStream[$i]);
}
$i++;
}