表1是栏目表,有一个比较关键的字段属性visible,是否可见。值当然是可见与不可见,分别用数字1,2标识。
表2是文章表,里面肯定就有对应的栏目ID了,现在文章表里有这么几个重要的属性,是否发布,是否可见,如果都为1,则表示可以被搜索到。只要有一个不为1则无法搜索到。
需求是这样滴:
文章搜索采用模糊搜索,具体包含哪些无所谓,现在是判断条件,首先得连表查找文章对应的栏目是否为可见的,如果不可见则表示该文章无法被搜索到,否则可以,然后第二个条件,就是该篇文章是否为可见,是否为已发布状态,只有同时满足 关键字,栏目为可见,文章自身为可见且已发布这4个条件才能被搜索到。
主要数据库代码如下:
problem_item 为内容表:
problem_type 为栏目表:
$where['ti
$where['content'] = ['like', '%' . $key . '%'];
$data = Db::name('problem_item')
->alias('a')
->field('a.id,a.ti
->join('__PROBLEM_TYPE__ b', 'a.pid=b.id')
->where(function ($query) use ($where) {
$query->whereOr($where);
})
->where(['a.visible' => 1,'b.visible' => '1','a.issue'=>1])
->order('a.weigh asc')
->select();
现在表中有一个内容数据中的issue=2,其他数据都为1,但是这条数据依然可以被搜索出来,请问我应该怎么改这段代码,才能实现,必须满足之前所说的4个条件才能被检索。
生成的sql语句如下:
SELECT `a`.`id`,`a`.`ti
。
表结构
:栏目表
CREATE TABLE `tm_problem_type` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT 'id',
`pid` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '父ID',
`name` varchar(30) NOT NULL DEFAULT '' COMMENT '栏目名称',
`weigh` int(10) NOT NULL DEFAULT '0' COMMENT '权重',
`visible` enum('1','2') NOT NULL DEFAULT '1' COMMENT '是否可见,1是2否',
`language` varchar(255) NOT NULL COMMENT '适用语言',
`createtime` datetime NOT NULL COMMENT '创建时间',
`updatetime` datetime NOT NULL COMMENT '更新时间',
PRIMARY KEY (`id`),
KEY `weigh` (`weigh`,`id`),
KEY `pid` (`pid`)
) ENGINE=InnoDB AUTO_INCREMENT=14 DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC COMMENT='答疑分类表';
内容表:
CREATE TABLE `tm_problem_item` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT 'id',
`pid` int(10) unsigned NOT NULL,
`ti
`content` text NOT NULL COMMENT '内容',
`weigh` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '权重',
`issue` enum('2','1') DEFAULT '2' COMMENT '发布?1是2否',
`visible` enum('1','2') NOT NULL DEFAULT '1' COMMENT '是否可见,1是2否',
`createtime` datetime NOT NULL COMMENT '创建时间',
`updatetime` datetime NOT NULL COMMENT '更新时间',
PRIMARY KEY (`id`),
KEY `id` (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8 COMMENT='答疑内容表';
最佳答案