我必须承认我不知道如何完成这个。我可以在 MySql 中进行查询,并且可以在 Zend Framework 中进行简单的表或 View 查询,但这超出了我的能力范围!
这是我尝试运行的查询:
SELECT * from (
SELECT
'Tab' as 'table_name', TabId as id, `TabTitle` as title,
(MATCH(`TabTitle`,`TabSubTitle`) AGAINST (@target)) as relevance
from Tab
UNION
SELECT
'Tab2' as 'table_name',
Tab2Id as id, `Tab2Title` as title,
(MATCH(`Tab2Title`,`Tab2Desc`) AGAINST (@target)) as relevance
from Tab2
)
as sitewide WHERE relevance > 0 order by relevance DESC;
我希望您能提供有关如何将其硬塞到 Zend 的 MVC 框架中的任何指示!
编辑添加:
这是我正在使用的当前模型代码,它给出了错误“传递给 Zend_Paginator_Adapter_DbTableSelect::__construct() 的参数 1 必须是 Zend_Db_Select 的实例,给定字符串,”
class Application_Model_Search extends Zend_Db_Table
{
protected $_name = ‘Search’;
protected $_primary = 'SearchId';
function getSearchResults($page, $searchTerm)
{
$query = "
SELECT * from (
SELECT
'Tab' as 'table_name', TabId as id, `TabTitle` as title,
(MATCH(`TabTitle`,`TabSubTitle`) AGAINST (@target)) as relevance
from Tab
UNION
SELECT
'Tab2' as 'table_name',
Tab2Id as id, `Tab2Title` as title,
(MATCH(`Tab2Title`,`Tab2Desc`) AGAINST (@target)) as relevance
from Tab2
)
as sitewide WHERE relevance > 0 order by relevance DESC;
";
echo ($query);
$paginator = new Zend_Paginator(new Zend_Paginator_Adapter_DbTableSelect($query));
$paginator->setItemCountPerPage(15); //
$paginator->setCurrentPageNumber($page);
return $paginator;
}
}
最佳答案
$config = array (
'dbname' => 'test',
'password' => 'passwd',
'username' => 'user'
);
$database = new Zend_Db_Adapter_Mysqli ($config);
$query_1 = new Zend_Db_Select ($database);
$query_1->from ('Tab', array (
'Tab AS table_name',
'TabId AS id',
'TabTitle` as title',
new Zend_Db_Expr ('(MATCH(`TabTitle`,`TabSubTitle`) AGAINST (@target)) as relevance')
));
$query_2 = new Zend_Db_Select ($database);
$query_2->from ('Tab2', array (
'Tab2 AS table_name',
'Tab2Id AS id',
'Tab2Title` as title',
new Zend_Db_Expr ('(MATCH(`Tab2Title`,`TabDesc`) AGAINST (@target)) as relevance')
));
$query = $database->select ()
->union (array (
$query_1,
$query_2
));
echo $database->select ()->from ($query)->where ('relevance>0')
->order ('relevance DESC');
关于mysql - 使用 MySQL 匹配和联合进行 ZEND 搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13214115/