gpt4 book ai didi

php - 从两个表中选择,其中每个表中的不同列等于 $id ORDER BY 公共(public)列 (PHP/MySQL)

转载 作者:行者123 更新时间:2023-11-29 09:05:35 25 4
gpt4 key购买 nike

我正在尝试从两个表中进行选择并按日期排序(它们都有的列)。一个表(tableA)有一个名为“A”的列,另一个表(tableB)有一个名为“B”的列,我使用 array_key_exists() 来区分两者(如果“A”键存在,我通过FunctionA(),如果“B”键存在,我通过 FunctionB() 运行数组。我只需要 20 个最新(按日期)的条目。我需要 SQL 查询来完成此任务。

我已经知道回复将是“如果它们的结构相似,那么您应该只使用单个表”,但我不想这样做,因为 tableA 与 tableB 截然不同( tableA),并且使用单个表来存储数据将导致为 tableB 格式化的条目产生大量空列,更不用说由于 tableB 不需要 tableA 的大部分列,这将是一种非常难看的表格式) .

我只想以有序(按日期)的方式在一个流中显示两个表中的数据。

顺便说一句,我需要选择 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++;
}

最佳答案

尝试使用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

或者,如果您想在 tableA 和 tableB 之间保留重复项,请改用 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'

这就是你想要的,不是吗?理解你真正想用这个实现什么有点困难......

关于php - 从两个表中选择,其中每个表中的不同列等于 $id ORDER BY 公共(public)列 (PHP/MySQL),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7097216/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com