【问题标题】:Database driven PHP navigation数据库驱动的 PHP 导航
【发布时间】:2012-02-15 04:40:56
【问题描述】:

假设我们有以下表格

表Pages:

 id | short_name | long_name   | token
  1 |    Mail    | My mail box | mail
  2 | All mails  | All mails   | all
  3 | Inbox      | Inbox only  | inb
  4 | Users      | Users       | users
  5 | All users  | All users   | all

和表navigation:

 id | parent_id  | page_id    
  1 |    0       | 4 
  2 |    0       | 1  
  3 |    1       | 2 
  4 |    1       | 3       
  5 |    4       | 5   

很长一段时间以来,我一直只使用页面 ID。很容易找到只有 1 个值的页面的详细信息 - $_GET['id'],因为页面的 id 都是唯一的。

现在,我想创建人类可读(基于令牌)的导航系统。

但是有 1 个问题。令牌并不总是唯一的。

例如。 index.php?page=mail&subpage=all 和 index.php?page=users&subpage=all

想不通,如何找到这2个页面的short_name和long_name(或页面的其他信息)(通过2 - $_GET['page']和$_GET['subpage']或更多变量)?

也许我走错路了。如果你这么认为,请提出你的想法,并解释一下。提前谢谢。

【问题讨论】:

  • 为什么你不能让你的令牌独一无二?您可以将它们命名为 all_users 和 all_mail
  • @StephenSarcsamKamenar 没有。我需要在地址栏上显示父名称和页面名称。所以当我打开重写引擎时,它会看起来像。 domain.com/mail/all

标签: php mysql navigation mysqli parent-child


【解决方案1】:

很抱歉,如果这不是开箱即用的,但这有帮助吗?

SELECT * FROM Pages
JOIN navigation ON Pages.id=navigation.page_id
WHERE navigation.parent_id=(SELECT id FROM Pages WHERE token={$page})
AND Pages.token={$subpage}

【讨论】:

  • 我的代码还没有准备好测试这个查询,但是他们更容易获得像 domain.com/mail/all 这样的结果还是你的建议是使用唯一的令牌?
  • 以domain.com/mail/all 为例。这应该找到父级具有mail 令牌的页面,并且该页面具有all 的令牌。您不需要唯一的令牌。
猜你喜欢
  • 1970-01-01
  • 2014-07-12
  • 2011-01-22
  • 2010-12-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多