gpt4 book ai didi

php - 具有后备 (COALESCE) 和 JOINS 的 MySQL 查询

转载 作者:行者123 更新时间:2023-11-30 00:56:09 25 4
gpt4 key购买 nike

所以我很难尝试为此编写一个查询。我有一个表,我们将其称为 table_a。我需要提取一条符合特定条件的记录。如果第一个没有产生任何结果,那么就退回到另一个。我已经这样做有一段时间了,这很可能是我所缺少的一些简单的东西。

SELECT  COALESCE(ta.id,tb.id,0) AS theid,
FROM table_a
RIGHT JOIN (
SELECT table_a.id
FROM table_a
WHERE table_a.field_3='1' AND table_a.field_4='100' AND table_a.user_id='someidhere'
) AS ta
ON table_a.id = ta.id

RIGHT JOIN (
SELECT table_a.id
FROM table_a
WHERE table_a.field_5='2' AND table_a.field_4='100' AND table_a.user_id='someidhere'
) AS tb
ON table_a.id = tb.id

RIGHT JOIN 的问题是,如果第一个记录没有生成记录,它将不会继续到下一个记录,如果我执行 LEFT JOIN,它将从 table_a 中提取所有记录,如果我指定 WHERE table_a.user_id= 'someidhere' 显然会提取该用户的所有记录。我只是在寻找一个。基本上只有 field_3 和 field_5 会发生变化。如果我找不到 field_3 的内容,它将移至 field_5。这将在一个有 80k 记录的表上运行。想法?

最佳答案

虽然是新手,但从一个神秘的例子开始并不是最好的,但我正在尝试。您的查询本身对其所做的事情毫无意义。它与自身连接,最终获取某个事物的 ID,该事物针对某个用户 ID 和字段 4 值,但字段 3 或 5 应该分别是 1 或 2。

因此,我已将查询直接写入用户 ID 和字段 4 的“a”表中,无论您的右连接如何,这些查询都很常见...然后为字段 3 和 5 列添加了一个 ( OR ) 。这样,我只关心具有相同用户/字段 4 区域的 3 OR 5 值。 ORDER BY 子句将强制首先对字段 3 值为 1 的任何记录进行排序,然后将字段 5 = 2 的任何记录排在第二位...因此,如果存在,最后的第一条记录将是“1”条目。

SELECT
table_a.id
FROM
table_a
where
table_a.user_id = 'someidhere'
AND table_a.field_4 = '100'
AND ( table_a.field_3 = '1'
OR table_a.field_5 = '2' )
order by
case when table_a.field_3 = '1'
then 1 else 2 end

因此,如果返回多条记录,您只需要关心返回的第一条记录(如果有两条符合条件)。

关于php - 具有后备 (COALESCE) 和 JOINS 的 MySQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20530891/

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