2012-02-15 85 views
0

比方说,我们有如下表数据库驱动的PHP导航

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 

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

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

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

例如, index.php?page=mail&subpage=allindex.php?page=users&subpage=all

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

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

+0

为什么你不能让你的令牌独一无二? 你可以将它们命名为'all_users'和'all_mail' – 2012-02-15 04:47:00

+0

@StephenSarcsamKamenar no。我需要在地址栏上显示父母名称和页面名称。所以当我打开重写引擎时,它会看起来像。 domain.com/mail/all – heron 2012-02-15 04:50:30

回答

0

对不起,如果这不能开箱即用,但这有帮助吗?

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} 
+0

我的代码还没有准备好足够测试这个查询,但是,他们更容易得到像domain.com/mail/all这样的结果,或者您的建议是使用独特的令牌吗? – heron 2012-02-15 05:03:39

+0

以'domain.com/mail/all'为例。这应该找到父母拥有“邮件”标记并且该页面具有“全部”标记的页面。你不需要独特的令牌。 – 2012-02-15 05:07:27