mysql - 使用 MySQL 匹配和联合进行 ZEND 搜索

标签 mysql zend-framework search zend-db

我必须承认我不知道如何完成这个。我可以在 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/

相关文章:

php - Android Google Maps v2 从 JSON 数组 php mySQL 添加 map 标记

php - 使用 Zend Framework 时,您将验证逻辑放在哪里?

php - Zend 框架和 XML/XSLT 集成

zend-framework - Zend 框架 : Subdirectories in controllers directory

java - 使用二分查找插入 ArrayList<Occurrence>

php - 插入MYSQl太慢

php - 使用多个 LIKE 条件搜索查询无法按预期工作

mysql - 用户 'root' @'localhost' 的访问被拒绝(使用密码:YES)(Mysql::Error)

mysql - 计算不同表中相同 id 上的单独行 : MySQL

MySQL 查询以获取跨行使用的所有不同字母