gpt4 book ai didi

php - 使用结果计算类别组

转载 作者:行者123 更新时间:2023-11-29 20:27:10 25 4
gpt4 key购买 nike

因此,我们有一个 Drupal 站点,其中节点标记为 4 个词汇表。用 SQL 术语来说,这些都是基表上的简单连接。简而言之,它大致如下所示:

SELECT a.name AS location, b.name AS sector, c.name AS tag, d.name AS status
FROM node n
LEFT JOIN a ON a.id = n.id
LEFT JOIN b ON b.id = n.id
LEFT JOIN c ON c.id = n.id
LEFT JOIN d ON d.id = n.id
WHERE n.type = 'X'
GROUP BY a.name, b.name, c.name, d.name

我们有一个列表页面,您可以在其中按 A、B、C 和 D 进行过滤;每个都有一个所有值的列表和一个“全部”选项。

我们需要的是 A、B、C 和 D 的不同组合的列表,有结果。这是为了生成站点地图,显然,我们不想引导机器人进入空结果页面。

我尝试使用WITH ROLLUP 并取得了部分成功。这给了我 a/b/c/da/b/c/*a/b/*/*a/*/*/**/*/*/*。但是,它不会执行 */*/*/d*/b/*/**/b/*/d (以及所有类似的组合)。

关于使用 SQL 和这种方法是否可行,有什么建议吗?我不会反对使用子查询。

我们的替代理论是循环遍历所有节点并用 PHP 构建一个数组,其中包含该节点出现的所有组合。例如:如果节点 1 位于 a/b/c/d 中,那么我们的数组将添加以下内容

[
'a/b/c/d',
'a/b/c/*',
'a/b/*/d',
'a/*/c/*',
'a/*/c/d',
'a/*/*/*',
'*/*/*/d',
'*/b/c/d',
'*/b/c/*',
'*/b/*/d',
'*/*/c/*',
'*/*/c/d',
'*/*/*/*',
'*/*/*/d',
'*/*/*/*',
]

(我认为这就是所有组合)。

最后,这些唯一的集合将是所有可用的路径/选项,没有任何空的路径/选项。我想。

这显然是一种蛮力方法。感觉好像可以,但是感觉不如用 SQL 优雅。

最佳答案

编辑:这不起作用,我很确定这不是全部结果

嗯...刚刚尝试了一下,看起来您可以通过使用 2 个查询(在每个方向上分组)来获得所有可能的结果:

即按a.name、b.name、c.name、d.name分组

然后按 d.name、c.name、b.name、a.name 进行分组

但后来我尝试在一个查询中添加这两个分组方向,它看起来很有希望:

即 GROUP BY a.name, b.name, c.name, d.name, c.name, b.name, a.name

<小时/>

我认为这可行,但可能有更好的方法。

我使用 4 个查询来获取所有结果,如下所示:

<小时/>
SELECT a.name AS location, b.name AS sector, c.name AS tag, d.name AS status
FROM node n
LEFT JOIN a ON a.id = n.id
LEFT JOIN b ON b.id = n.id
LEFT JOIN c ON c.id = n.id
LEFT JOIN d ON d.id = n.id
WHERE n.type = 'X'
GROUP BY a.name, b.name, c.name, d.name
<小时/>
SELECT b.name AS sector, c.name AS tag, d.name AS status
FROM node n
LEFT JOIN b ON b.id = n.id
LEFT JOIN c ON c.id = n.id
LEFT JOIN d ON d.id = n.id
WHERE n.type = 'X'
GROUP BY b.name, c.name, d.name
<小时/>
SELECT c.name AS tag, d.name AS status
FROM node n
LEFT JOIN c ON c.id = n.id
LEFT JOIN d ON d.id = n.id
WHERE n.type = 'X'
GROUP BY c.name, d.name
<小时/>
SELECT d.name AS status
FROM node n
LEFT JOIN d ON d.id = n.id
WHERE n.type = 'X'
GROUP BY d.name
<小时/>

因此,第一个查询返回所有 4 个类别都有值的结果,即 a/b/c/d,并且汇总将它们添加为 a/b/c/-、a/b/-/-、a//-/-/-(连字符代表所有过滤器值,当我出于某种原因键入星号时星号消失)

然后第二个查询返回 */b/c/d 的所有内容,并汇总添加 -/b/c/-, -/b/-/-

第三个返回 -/-/c/d 并汇总添加 -/-/c/-

然后第四个添加 -/-/-/d 和 -/-/-/-

我认为这就是一切

关于php - 使用结果计算类别组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39244647/

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