我知道这是一个古老的话题,但我想它永远不会失去现实性。我现在正在开发类似的东西。这是我的方法。我将服务器设置与MySQL,Apache,PHP和Zend Framework 2用作应用程序框架,但它应与其他设置一起使用。
这是一个简单的实施指南,您可以据此进一步发展。
您将需要实现自己的查询语言解释器,因为有效的SQL太复杂了。
例:
select id, password from user where email_address = "xyz@xyz.com"
物理数据库布局:
表“规格” :(应缓存在数据访问层中)
- id:int
- parent_id:整数
- 名称:varchar(255)
表“项目”:
- id:int
- parent_id:整数
- spec_id:整数
- 数据:varchar(20000)
表“规范”的内容:
- 1,0,'用户'
- 2,1,'email_address'
- 3、1,“密码”
表“ items”的内容:
- 1,0,1,''
- 2,1,2,'xyz@xyz.com'
- 3、1、3,“我的密码”
用我们自己的查询语言翻译示例:
select id, password from user where email_address = "xyz@xyz.com"
标准SQL看起来像这样:
select
parent_id,
data
from
items
where
spec_id = 3
and
parent_id in
(
select
id
from
items
where
spec_id = 1
and
id in
(
select
parent_id
from
items
where
spec_id = 2
and
data = "xyz@xyz.com"
)
)
您将需要将规范表缓存在关联数组或哈希表中或类似的东西中,才能从规范名称中获取spec_id。否则,您将需要插入更多的SQL开销才能从名称中获取spec_id,如以下代码片段所示:
不好的例子,不要使用它,避免使用它,而是缓存规格表!
select
parent_id,
data
from
items
where
spec_id = (select id from specs where name = "password")
and
parent_id in (
select
id
from
items
where
spec_id = (select id from specs where name = "user")
and
id in (
select
parent_id
from
items
where
spec_id = (select id from specs where name = "email_address")
and
data = "xyz@xyz.com"
)
)
我希望您能有所想法,并可以自己确定该方法是否对您可行。
请享用!:-)