0

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

案例如下:

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

我们当前使用的查询如下所示:

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

这一切都很好。如果查询有结果,则有一个小部件,如果没有结果(计数 = 0),则管理员用户没有为该特定页面预订小部件。

现在我们有一个看起来像/profile/login/AEJIJDOJO=. 如果在该 uri 上预订了一个小部件,那么上面的查询就可以完成这项工作。如果没有预订小部件,那么我们需要获取预订的小部件,/profile/login依此类推......

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

4

2 回答 2

1

你可以使用喜欢:

SELECT widget_type FROM cms_pages 
WHERE page_uri = '/profile/login' OR page_uri LIKE '/profile/login/%'
于 2013-06-18T13:44:17.247 回答
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>
于 2013-06-18T13:50:59.600 回答