我正在尝试从两个表和 ORDER BY 日期(他们都有的列)中选择。一个表(tableA)有一个名为“A”的列,另一个表(tableB)有一个名为“B”的列,我使用array_key_exists()来区分两者(如果“A”键存在,我运行数组通过FunctionA(),如果“B”键存在,我通过 FunctionB()) 运行数组。我只需要 20 个最新的(日期方面的)条目。我需要 SQL 查询来完成此操作。
我已经知道回复将是“如果它们的结构相似,那么你应该只使用一个表”,但我不想这样做,因为 tableA 与 tableB 截然不同(tableA 中有更多列),并且使用单个表来存储数据会导致为 tableB 格式化的条目有很多空列,更不用说由于 tableB 不需要 tableA 的大多数列,这将是一个非常难看的表格式)。
我只想以有序(按日期)的方式并在一个流中显示两个表中的数据。
顺便说一下,我需要选择 WHERE tableA.poster_id = $id 和 tableB.receiver_id = $id。
解决方案:
我正在更新这个,以防万一遇到同样困境的其他人出现。在实现了@Erik A. Brandstadmoen 慷慨地给我的 SQL 查询之后,这基本上就是我的代码最终结果:
$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++;
}