我有嵌套的集合表(MySQL),里面有大约 150 万条记录。表结构为:
id | name | root_id | lft | rgt | level
我需要获取字符串,其中包含所有父记录的名称加上记录名称,我们称之为“全名”。例如,它将是
"United States, California, Los Angeles"
为“洛杉矶”唱片。
我可以使用以下命令查询 ONE 记录的所有名称:
SELECT parent.name
FROM location AS node,
location AS parent
WHERE node.lft BETWEEN parent.lft AND parent.rgt
AND parent.root_id=node.root_id AND node.id=:id
ORDER BY parent.level
并使用 implode() 构建 full_name
但是此请求仅适用于一条记录,对于多个呼叫而言工作速度太慢。所以现在我想将 'full_name' 添加到 Sphinx 索引(或者可能直接添加到 MySQL)。
问题:
是否可以构造这样的 sql 查询,为每条记录选择“full_name”以将其放入 Sphinx 索引?我认为这将是这种情况的理想解决方案。
我还尝试更新 MySQL 表,添加“full_name”字段,但我的更新请求需要几天时间才能完成。这是个好主意吗?是否有可能使此更新足够快?
我在想,也许我应该转移到 PostgreSQL 并使用分层请求(我没有使用这个数据库的经验,所以不能确定)?
谢谢