我和我们的团队有一个关于从数据库中选择数据的有趣案例。我们想知道你们是否有很多不同的方法来解决这个问题。
案例如下:
我们有一个预订系统可以在页面上预订“小部件”。管理员用户可以通过在后端添加uri来预订窗口小部件,例如:/profile/login
。
我们目前使用的查询如下所示:
SELECT widget_type FROM cms_pages WHERE page_uri = '/profile/login';
这一切都非常好。如果查询中有结果,那么就会有一个小部件,如果没有结果(count = 0),则管理员用户没有将小部件预订到该特定页面。
现在我们有一个类似/profile/login/AEJIJDOJO=
的页面。如果在该uri上预订了一个小部件,那么上面的查询就完成了这项工作。如果没有预订小部件,那么我们需要获取在/profile/login
上预订的小部件等等...
我们目前有一个猴子php解决方案,所以我们想知道是否可以通过仅使用mysql来解决这个问题?
答案 0 :(得分:1)
您可以使用LIKE:
SELECT widget_type FROM cms_pages
WHERE page_uri = '/profile/login' OR page_uri LIKE '/profile/login/%'
答案 1 :(得分:0)
当这只是一个经典的many_many
关系时,我会避免尝试在MySQL中找到解析URL的解决方法。您需要widget
表,cms_page
和cms_page_has_widget
表。
然后获取页面的所有小部件,例如:
SELECT t3.* FROM cms_page t1, cms_page_has_widget t2, widget t3
WHERE t1.id = t2.page_id
AND t3.id = t2.widget_id
AND t1.id = <page_id>
或使用网址
SELECT t3.* FROM cms_page t1, cms_page_has_widget t2, widget t3
WHERE t1.id = t2.page_id
AND t3.id = t2.widget_id
AND t1.url = <page_url>