向各位讨教下tp5中left + where 条件

浏览:3489 发布日期:2018/06/24 分类:求助交流 关键字: sql thinkphp where join
问题是这样的,现在有两张表,
表1是栏目表,有一个比较关键的字段属性visible,是否可见。值当然是可见与不可见,分别用数字1,2标识。
表2是文章表,里面肯定就有对应的栏目ID了,现在文章表里有这么几个重要的属性,是否发布,是否可见,如果都为1,则表示可以被搜索到。只要有一个不为1则无法搜索到。
需求是这样滴:
文章搜索采用模糊搜索,具体包含哪些无所谓,现在是判断条件,首先得连表查找文章对应的栏目是否为可见的,如果不可见则表示该文章无法被搜索到,否则可以,然后第二个条件,就是该篇文章是否为可见,是否为已发布状态,只有同时满足 关键字,栏目为可见,文章自身为可见且已发布这4个条件才能被搜索到。
主要数据库代码如下:
problem_item 为内容表:
problem_type 为栏目表:

$where['title'] = ['like', '%' . $key . '%'];
$where['content'] = ['like', '%' . $key . '%'];

$data = Db::name('problem_item')
->alias('a')
->field('a.id,a.title')
->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`.`title` FROM `tm_problem_item` `a` INNER JOIN `tm_problem_type` `b` ON `a`.`pid`=`b`.`id` WHERE ( `title` LIKE '%发布测试%' OR `content` LIKE '%发布测试%' ) AND `a`.`visible` = 1 AND `b`.`visible` = '1' AND `a`.`issue` = 1 ORDER BY `a`.`weigh` ASC

表结构
:栏目表
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,
`title` varchar(50) NOT NULL COMMENT '内容标题',
`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='答疑内容表';



最佳答案
评论( 相关
后面还有条评论,点击查看>>