gpt4 book ai didi

php - UNION mysql 判断结果来自哪个表

转载 作者:行者123 更新时间:2023-11-29 12:15:33 26 4
gpt4 key购买 nike

$stmt = $dbh->prepare("SELECT id FROM table1 UNION SELECT id FROM table2 UNION SELECT id FROM table3 ORDER BY id DESC LIMIT 1");

上面的代码是我自动生成ID的代码。我想选择最后插入的ID。我想要做的是我想要插入三个表中的最后一个ID。它可以来自三个表中的任何一个。然后我想增加该ID。但问题是我需要知道最后一个 ID 来自哪个表,以便我可以选择另一个字段并记录最后一个 ID 具有特定属性。此属性取决于表格,这就是我想要获取表格的原因。

最佳答案

添加鉴别器列,并为每个查询使用 MAX 聚合函数以避免对巨大的中间结果集进行排序,并使用 UNION ALL 集合运算符代替 >UNION 运算符。 (由于每个查询仅返回一行,所以这不会产生太大差异;但是在我们不需要消除重复行的情况下,我们更喜欢使用 UNION ALL 集合运算符来避免不必要的(有时是昂贵的)操作。

类似这样的事情应该返回您想要的结果:

( SELECT 'table1'   AS source
, MAX(t1.id) AS max_id
FROM table1 t1
)
UNION ALL
( SELECT 'table2' AS source
, MAX(t2.id) AS max_id
FROM table2 t2
)
UNION ALL
( SELECT 'table3' AS source
, MAX(t3.id) AS max_id
FROM table3 t3
)
ORDER BY max_id DESC
LIMIT 1

这将为您提供一个结果集,该结果集标识具有最大 ID 的表名称。

注意:这假设“最后插入的 id”由最大值标识。如果两个表具有相同的最大 id 值,则不确定将返回哪一行。您可以将 source 添加到 ORDER BY 以使其具有确定性:

ORDER BY max_id DESC, source DESC

(我不清楚实际的要求;上面的语句应该返回与问题中的查询返回的值相同的值,以及一个辨别器,它告诉 id 是哪个表值来自。)

引用:https://dev.mysql.com/doc/refman/5.5/en/union.html

<小时/>

注意:这可能会满足您的用例,但在更一般的情况下,我们建议避免这种方法来获取最后插入的行的 id 值。

对于自动分配值的 auto_increment 列的值,last_insert_id 函数将返回前一行插入的第一行的 id 值同一 session 中的 INSERT 语句。在多用户系统中,假设“最高”id 值是当前 session 插入的行是安全的 - 这种方法实际上已被破坏。

关于php - UNION mysql 判断结果来自哪个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29861235/

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