2011-08-31 28 views
0

我有一个数据库表与书的详细信息,并希望用户搜索它。但是,我被告知可以读取页面上的所有数据加载到XML中,并允许在XML上执行搜索,而不是重复往返数据库。我的问题是,这是可能的吗?将数据库读取到XML并搜索它

我的表结构是这样的:

=============================================================== 
| id | name  | pages | category | date | publisher | 
=============================================================== 

有没有人做过这样的事情?

任何建议,将不胜感激。

+0

'进入XML并允许在XML上进行搜索'我真的好奇你对数千个结果做了什么?从XML读取?为什么不使用数据库或类似lucene的搜索功能?我认为使用XML搜索大量结果远比“往返数据库”更糟糕。 – DrColossos

回答

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) 
{ 
    //////////////// 
} 
} 
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> 

一个xpath查询来搜索书籍超过20页将

//book[pages > 20] 
+0

至于将您的数据库转换为XML,请参阅user900898的答案 – johnluetke

0

你似乎在暗示转储整个数据库表格转换成一个XML文件,当然可以完成,但它不会让你的搜索更快。为了加速数据库查询,您通常会对查询中使用的数据字段使用索引。

另一种技术(如DrColossos的评论也建议),如果您的搜索是文本密集型的​​ - 也许在标题(name?)字段中,则可以使用全文搜索引擎(如Solr或Sphinx)结合数据库引擎。这将为您提供文本字段中的每个词索引,从而允许更快和更高级的搜索。

问候。