我在mysql表中插入url。例如,我插入了8个条目,如下所示:
url
-----------------------------
http://example.com
http://www.example.com
http://example.com/
http://www.example.com/
http://example.com/sports
http://www.example.com/sports
http://example.com/sports/
http://www.example.com/sports/
。现在我如何编写一个查询来匹配example.com,它应该返回前4个条目,因为它们是相同的url?类似地,我如何编写查询以获取最后4个条目,因为它们是相同的?即使我有大量的条目,查询应该是快速的可能吗?
答案 0 :(得分:4)
好吧,如果你在一个表中有这些链接,你可以得到它们:
SELECT * FROM table WHERE url LIKE '%example.com%'
这快吗?不 - 它需要全表扫描。
如果我是你,我会建模我的数据库,将这些网址保存在2个表格中:
<强>链接强>
<强> related_links 强>
修改 - 回答评论:
您的数据库目前尚未正常化。您为“同一件事”保留了多条记录 - 您没有从DB中获益。在处理结构化数据时,DB很有用 - 您的查询需要进行字符串操作 - 这是一个非常复杂的操作。因此,尽管可能有可能返回您需要和想要的当前形式的数据库的结果,但它不会是一个微不足道的任务,并且肯定性能会很糟糕。
我的建议 - 修改数据库 - 至少将列subdomain
和relative_path
添加到您的表中并尽可能单独保存此信息 - 以便能够对其进行汇总查询。