我一直试图在我的网站上找到模仿Facebook网址的方法。 Facebook网址结构对于所有对象类型都是相同的,这里有一些网址及其来自Facebook的类型:
https://facebook.com/personUsername/
https://facebook.com/page-identifier/
https://facebook.com/app-identifier/
在搜索他们的api后,我发现每个对象都有type
,例如一个人有type
个“人”。
type
列的表:我的网站上有5个对象有5个表。
tracks
,artists
,users
,albums
,clips
这是我如何实现它。
用户转到https://mysite.com/track-slug/ 我拿着slug并查询所有mysql表上的slug,直到我找到一个匹配。然后我渲染正确的视图。
答案 0 :(得分:0)
这里有一个提示
htaccess的:
RewriteRule ^(.*)$ index.php/$1 [L]
PHP:
$uri = rawurldecode(trim(parse_url(getenv('REQUEST_URI'), PHP_URL_PATH), '/'));
$params = explode('/', $uri);
$params = explode('_', $params);
$controller = array_shift($params);
$method = array_shift($params);
现在转到
domain.com/track_slug
然后在你的index.php做
php > echo $controller
你应该得到track
php > echo $method
另外,您将获得slug
您对该信息的处理取决于您的控制器。让Track::slug()
进行数据库提取和查询。
或者你可以为poing做更多的事情
domain.com/query/track/slug
$uri = rawurldecode(trim(parse_url(getenv('REQUEST_URI'), PHP_URL_PATH), '/'));
$params = explode('/', $uri);
$request = array_shift($params);
$controller = array_shift($params);
$method = array_shift($params);
然后您的请求将被查询,您的控制器将跟踪,您的方法将是slug。
现在您知道要查询数据库中slug的track对象。
答案 1 :(得分:0)
如果您的MySQL表具有相同的列,则可以执行以下UNION
:
SELECT * FROM
(SELECT name, col1, col2 FROM table1
UNION
SELECT name, col1, col2 FROM table2
UNION
SELECT name, col1, col2 FROM table3
) AS t
WHERE t.name = 'abc'
示例结果:
+------+------+------+
| name | col1 | col2 |
+------+------+------+
| abc | 1 | 2 |
+------+------+------+
如果您还需要知道每个项目的表名,可以在每个SELECT
语句中添加另一列:
SELECT * FROM
(SELECT name, col1, col2, 'table1' AS 'table' FROM table1
UNION
SELECT name, col1, col2, 'table2' AS 'table' FROM table2
UNION
SELECT name, col1, col2, 'table3' AS 'table' FROM table3
) AS t
WHERE t.name = 'abc'
示例结果:
+------+------+------+--------+
| name | col1 | col2 | table |
+------+------+------+--------+
| abc | 1 | 2 | table2 |
+------+------+------+--------+
即使表中有不同的列,也可以将这种技术用于相同的表(例如name
,再加上例2中的表列),然后再进行第二次查询。其余的列,而不是每个表最多一个查询。