查询变量uri


Query on variable uri

我和我们的团队有一个关于从数据库中选择数据的有趣案例。我们想知道你们是否有不同的方法来解决这个案子。

情况如下:

我们有一个预订系统来预订页面上的"小部件"。管理员用户可以通过在后端添加uri将小部件预订到页面,如:/profile/login .

我们当前使用的查询是这样的:

SELECT widget_type FROM cms_pages WHERE page_uri = '/profile/login';

这一切都很好。如果查询有结果,那么有一个小部件,如果没有结果(count = 0),那么管理员用户没有将小部件预订到特定的页面。

现在我们有一个看起来像/profile/login/AEJIJDOJO=的页面。如果在那个uri上预订了一个小部件,那么上面的查询就完成了工作。如果没有一个widget被预订,那么我们需要获得在/profile/login上被预订的widget,依此类推…

我们目前有一个monkey php解决方案,所以我们想知道是否有可能用mysql来解决这个问题?

你可以使用LIKE:

SELECT widget_type FROM cms_pages 
WHERE page_uri = '/profile/login' OR page_uri LIKE '/profile/login/%'

当这只是一个经典的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>
或者使用URL
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>