我有一个包含图书详细信息的数据库表,希望用户可以搜索它。但是,有人告诉我,我可以将页面加载的所有数据读入XML,并允许在XML上执行搜索,而不是重复往返数据库。我的问题是,这有可能吗?
我的表结构是这样的:
===============================================================
| id | name | pages | category | date | publisher |
===============================================================
以前有人做过这类事吗?
任何建议都将不胜感激。
答案 0 :(得分:0)
XSLT可能会满足您的需求。
<强> Check the demo 强>
答案 1 :(得分:0)
这只是一个例子 - 假代码 - 你必须测试并重建这个
您必须从表中创建xml文件。
$dom = new DOMDocument('1.0', 'utf-8');
function arr2xml($arr, $el=null)
{
global $dom;
foreach ($arr as $key=>$val){
$tag_el=$dom->createElement((is_numeric($key) ? 'row' : $key));
(is_array($val) ? arr2xml($val, $tag_el) : $tag_el->appendChild($dom->createCDATASection($val)));
(empty($el)) ? $dom->appendChild($tag_el) : $el->appendChild($tag_el);
}
}
$result = mysql_query('select * from your table', $mysql_link);
$arr = array();
if ($result !== FALSS && mysql_num_rows($result))
{
while($row = mysql_fetch_array($result))
$arr[] = $row;
}
arr2xml($arr);
file_put_contents('tablexml.xml', $dom->saveXml());
///// FOR SEARCH BY category
$dom = new DOMDocument;
$dom->loadXML(file_get_contents('tablexml.xml'));
$xpath = new DOMXPath($dom);
$res = $xpath->query('//row[cotanins(category, $search_value)]');
if ($res->length)
{
foreach ($res as $el)
{
////////////////
}
}
答案 2 :(得分:0)
xpath
是您用来进行实际搜索的内容。这是query language for XML。
假设xml中的数据库文件类似于以下内容:
<database>
<book>
<id>000000</id>
<name>A Book</name>
<pages>23</pages>
<category>Tech</category>
<date>2011-08-31</date>
<publisher>Publisher</publisher>
</book>
...
</database>
搜索超过20页的图书的xpath
查询
//book[pages > 20]
答案 3 :(得分:0)
您似乎建议将整个数据库表转储到XML文件中,确保可以完成,但不会使您的搜索更快。为了加速数据库查询,通常会对查询中使用的数据字段使用索引。
另一种技术(也由DrColossos的评论建议),如果您的搜索是文本密集型的 - 可能在标题(名称?)字段中,那么您可以使用全文搜索引擎(例如Solr或Sphinx)与数据库引擎结合使用。这将为您提供文本字段中的每个单词索引,从而允许更快,更高级的搜索。
问候。