如何从Places. sqlite数据库中显示具有相同标签"press_germany"的书签。我使用SQLite管理器扩展以及SQLite软件的DB浏览器。我没有看到任何标签表,我不知道火狐是如何创建这些标签的。
所有我发现接近我的目标是在以下链接:
stackoverflow,superuser.com.你是谁?
我尝试了此查询,但显示0个结果:
SELECT moz_places.url, moz_places.title
FROM moz_places
LEFT OUTER JOIN moz_bookmarks
ON moz_places.id = moz_bookmarks.fk
WHERE moz_bookmarks.title = 'press_germany'
字符串
谢谢.
一个places. sqlite架构(如果有帮助):Mozilla Developer The Places database
5条答案
按热度按时间kpbpu0081#
当你在Firefox中创建一个标签时,它会在moz_bookmarks中创建一个条目,其中title列将包含标签和fk(指向moz_places. id的外键。该标签下的任何书签都将有指向标签id的moz_bookmarks.parent。所以你需要做的第一件事就是找到标签的id。
字符串
通过包含AND语句,你确保你命中了标签。如果它是一个实际的书签,fk将有一个值。我们不希望这样,我们希望fk为NULL。
现在我们有了它,我们需要在查询中使用它。你可以这样做:
型
注意,在上面的查询中,我们在FROM语句中使用了第一个查询的结果(很像你做的-但是为那些可能不熟悉的人注解),并将其结果分配给别名'tag'(你可以选择任何你想要的别名,因为你可能知道,只是不要使用保留字或与字段名产生冲突)。
我怀疑你的最后一句话看起来像这样(如果不是,我很确定你将能够从那里调整它):
型
上面不会做递归列表。换句话说,如果文件夹中有子文件夹,则子文件夹名称将在查询中列出,但不会列出其内容,包括子子文件夹。
如果你想递归地拉取所有书签,这里有一个我通过调整别人的查询得到的查询。
型
icnyk63a2#
我想我设法列出了我的“press_德国”标签。
字符串
最后一件事:我想列出我的结果如下:{id - Name - Location}但我不知道如何获得“Name”列。MartinStettner's架构响应非常具有解释性。“Name”的值将在第一行的“title”字段中检索(stackoverflow)。请再次帮助。
x6yk4ghg3#
注意:基于Firefox dev 63.0b6
请仔细查看
moz_bookmarks
中的数据。具有标签标题的行中的fk
是什么?真实的线索在文档中[强调我的]:
moz_bookmarks:此表包含书签、文件夹、分隔符和标签,并定义了层次结构。**层次结构通过父列定义,父列指向父记录
moz_bookmarks
。**位置列从0开始,每增加一个就增加一个。fk列提供moz_places中相应记录的id号。这些表是紧密引用的,因此
join
似乎没有必要。FROM moz_places,moz_bookmarks tag, moz_bookmarks childs
个看看你会怎么做
--附录-->
您需要
moz_bookmarks
中的两种“类型”的行,它们是互斥的。“标签”行,它有一个标题和一个id,但是fk
是NULL。而moz_bookmarks
中的“子”行,它有一个parent_key
,它匹配“标签”行的id
和一个fk
(它是moz_places
中相应行的id)。这里的关键是使用“self join”。我发现this tutorial可以帮助你学习这个概念并构建一个工作查询。在你的例子中,“FROM”子句将包含
moz_places
。至于评论中发布的查询:没有行匹配,因为它显式选择了
fk = NULL
的行,并且在moz_places中没有id = NULL
的行。a64a0gku4#
我的目标是把对应于一个项目的标签放在一边备用,从而减轻我的书签(大约3000个标签有200000个书签,这表明Firefox非常健壮)。我可以用DB Browser for SQLite将这些标签导出为CSV格式,并获得一个xlsx文件。这段代码非常适合我:只有标签的名称和位置。
字符串
感谢贡献者。
sg24os4d5#
要更新所有书签中的标签,您可以使用 Firefox > Library 窗口
或sqlite:
验证码:
字符串
这篇文章可能也有帮助:Firefox bookmarks tags places.sqlite