gpt4 book ai didi

从选择中选择的MySQL重复列

转载 作者:行者123 更新时间:2023-11-30 21:30:15 24 4
gpt4 key购买 nike

我有几张表:

  • 资源(包含所有帖子)

    进程号 |用户名 |标题 |链接 |内容 |标题 | sdesc|在 |喜欢

  • 标签(包含所有标签和一个 ID)

    编号 |鼻涕虫

  • retags(连接资源和它的标签)

    进程号 | tid

我正在尝试制作一个搜索引擎,您可以使用它通过多个标签、一个搜索值进行搜索,并按最新或最喜欢的顺序对结果进行排序。

我用于按标签搜索的 SQL 是:

SELECT
resources.pid, resources.title
FROM resources
INNER JOIN retags ON resources.pid = retags.pid
INNER JOIN tags ON retags.tid = tags.id
GROUP BY resources.pid
HAVING
SUM(tags.slug = 'tag-z')
AND
SUM(tags.slug = 'tag-y')

如何将 SQL 应用于搜索值 WHERE title LIKE '%bla%' 并将 ORDER BY at DESC 应用于此标记搜索 SQL?我尝试从 select 中选择,但不断出现错误,例如“重复列 pid”、“字段列表中的列‘pid’不明确”等

有人可以帮我处理这个 SQL 吗?谢谢

我已经尝试了 StackOverflow 中的所有方法,比如在一个SELECT pid as pid_ ... 上使用列名的别名,甚至在两个选择上,但我仍然不断收到相同的重复列错误。

编辑:我从中得到错误的 SQL:

SELECT * FROM 
(SELECT * FROM resources
INNER JOIN retags ON resources.pid = retags.pid
INNER JOIN tags ON retags.tid = tags.id
GROUP BY resources.pid
HAVING
SUM(tags.slug = 'A2') AND
SUM(tags.slug = 'AS')
) AS tsr WHERE tsr.title LIKE '%bla%' ORDER BY tsr.`at` DESC

这只是其中之一,我已经尝试了很多来自其他帖子的不同类型以及我从中得到的不同错误。

最佳答案

WHERE 子句位于 GROUP BY 之前:

SELECT rs.pid, rs.title
FROM resources rs JOIN
retags rt
ON rs.pid = rt.pid JOIN
tags t
ON rt.tid = t.id
WHERE rs.title LIKE '%bla%'
GROUP BY rs.pid
HAVING SUM(t.slug = 'tag-z') AND
SUM(t.slug = 'tag-y')
ORDER BY MAX(rs.at);

严格来说,ORDER BY 中不需要 MAX() 假设 pid 唯一标识 资源中的每一行

我的猜测是 at 在多行中,因此您需要使用它来自的表来限定引用。请注意,我引入了表别名,以便查询更易于编写和阅读。

关于从选择中选择的MySQL重复列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56613133/

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