이 글은 주로 thinkPHP 다중 테이블 쿼리 구현 방법과 페이징 기능을 소개하고, thinkPHP 다중 테이블 쿼리의 관련 구현 기법과 쿼리 결과의 페이징 표시를 구체적인 예시 형태로 분석해 도움이 필요한 친구들이 참고할 수 있다.
자세한 내용은 다음과 같습니다.
프로젝트의 비즈니스 로직은 교사가 시험지를 업로드하고, 답안지를 설정하고, 시험지와 관련된 답안지가 게시된 후에만 해당 학급이나 그룹에 답안지를 게시하는 것입니다. 시험지는 시스템 시험지에서 검색할 수 있으며, 다른 교사도 수집할 수 있습니다. 프론트엔드 수집 모듈에는 사용자에게 검색 기능을 제공하기 위해 입력란을 제공하는 업체가 있는데, 미리 디자인된 검색 테이블에서는 시험지 테이블과 연결된 시험지 ID가 하나만 있으면 어떻게 될까요? 사용자가 시험지 제목을 검색한다고요? 두 개의 테이블을 쿼리하는 대신 제가 처음에 생각한 방법은 컬렉션 테이블에 추가 필드를 추가하는 것, 즉 시험지 문제의 필드를 컬렉션 테이블에 추가하는 것이었습니다. 사업이 완료되었습니다. 오늘 문제은행 공유 논리를 다루다가 이 문제를 다시 발견했습니다. 동료가 디자인한 공유 테이블에는 문제은행 ID가 하나만 있는 것을 보고 동료에게 전화하여 "수정"했습니다. 나는 여전히 동료의 디자인 아이디어를 듣고 싶었고, 동료는 테이블 쿼리라고 말했습니다. 확인해 보겠습니다. 테이블 쿼리를 사용하는 데 익숙한 것 같습니다. 이런 상황을 예상하지 못했고 경멸을 받았습니다. 그래서 나는 내 실수를 정면으로 직면했습니다. 물론 전제는 내 자신에 대해 이야기하는 것입니다. 지금 생각하면 아이디어가 당장은 아니므로 아래에 관련 TP 코드를 제공하겠습니다.
// 异步请求试卷夹下某一个试卷夹的列表 public function ajaxLists() { extract($_GET); $page = intval($_GET['p']); $prefix = C('DB_PREFIX'); $collect = $prefix . 'collect'; $resource = $prefix . 'resource'; if ($keyword) { $arr = preg_split('/ /', $keyword); // 搜索标签 foreach ($arr as $value) { $id = A('Home/Papers')->trunWordToId(array($value)); if ($id) { $where['resource.rta_id'][] = array('LIKE', '%,' . $id . ',%'); } $where['resource.re_title'][] = array('LIKE', '%' . $value . '%'); } if ($where['resource.rta_id']) { $where['resource.rta_id'][] = 'AND'; } if ($where['resource.re_title']) { $where['resource.re_title'][] = 'OR'; } if ($where['resource.re_title'] && $where['resource.rta_id']) { $where['_logic'] = 'OR'; } } if ($where) { $map['_complex'] = $where; } $map['collect.a_id'] = $this->authInfo['a_id']; $map['_string'] = 'collect.col_object_id = resource.re_id'; // 总数 $count = M()->table("$collect collect, $resource resource")->where($map)->count(); // 总页数 $regNum = ceil($count/6); // 验证当前请求页码是否大于总页数 $page = $page > $regNum ? $regNum : $page; // 引入ajax分页库 import("@.ORG.Util.AjaxPage"); $Page = new AjaxPage($count, 6); $list['page'] = trim($Page->show()); $list['list'] = M()->table("$collect collect, $resource resource")->where($map)->order('col_id DESC')->limit($Page->firstRow . ',' . $Page->listRows)->field('collect.col_id,collect.col_object_id,resource.re_id,resource.re_title,resource.re_created,resource.re_collect_count,resource.re_score_count,resource.re_score_num,resource.rta_id')->select(); // 获取试卷的标签 $wheree['rta_id'] = array('IN', trim(str_replace(',,', ',', implode('', getValueByField($list['list'], 'rta_id'))), ',')); $tag = setArrayByField(M('ResourceTag')->where($wheree)->field('rta_id,rta_title')->select(), 'rta_id'); // 把标签和试卷对应 foreach ($list['list'] as $key => &$value) { $str = ''; foreach ($tag as $k => $v) { if (strpos($value['rta_id'], ',' . $k . ',') !== FALSE) { $str .= ' | ' . $v['rta_title']; } $value['rta_title'] = trim($str, ' |'); } if ($keyword) { foreach ($arr as $vv) { if (strpos($value['re_title'], $vv) !== FALSE) { $value['re_title'] = str_replace($vv, '<font color=\'red\'>' . $vv . '</font>', $value['re_title']); } if (strpos($value['rta_title'], $vv) !== FALSE) { $value['rta_title'] = str_replace($vv, '<font color=\'red\'>' . $vv . '</font>', $value['rta_title']); } } } $value['re_created'] = date('Y-m-d', $value['re_created']); } echo json_encode($list); }: 관련 추천:
파이썬 플라스크 멀티 페어 멀티 테이블 쿼리 자세한 설명
다중 테이블 쿼리결과 병합 및 내부 조인 쿼리 [명령줄 모드]
🎜🎜🎜🎜🎜🎜🎜위 내용은 ThinkPHP의 다중 테이블 쿼리 및 페이징 기능 구현 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

thinkphp是国产框架。ThinkPHP是一个快速、兼容而且简单的轻量级国产PHP开发框架,是为了简化企业级应用开发和敏捷WEB应用开发而诞生的。ThinkPHP从诞生以来一直秉承简洁实用的设计原则,在保持出色的性能和至简的代码的同时,也注重易用性。

本篇文章给大家带来了关于thinkphp的相关知识,其中主要介绍了关于使用think-queue来实现普通队列和延迟队列的相关内容,think-queue是thinkphp官方提供的一个消息队列服务,下面一起来看一下,希望对大家有帮助。

thinkphp基于的mvc分别是指:1、m是model的缩写,表示模型,用于数据处理;2、v是view的缩写,表示视图,由View类和模板文件组成;3、c是controller的缩写,表示控制器,用于逻辑处理。mvc设计模式是一种编程思想,是一种将应用程序的逻辑层和表现层进行分离的方法。

本篇文章给大家带来了关于thinkphp的相关知识,其中主要介绍了使用jwt认证的问题,下面一起来看一下,希望对大家有帮助。

thinkphp扩展有:1、think-migration,是一种数据库迁移工具;2、think-orm,是一种ORM类库扩展;3、think-oracle,是一种Oracle驱动扩展;4、think-mongo,一种MongoDb扩展;5、think-soar,一种SQL语句优化扩展;6、porter,一种数据库管理工具;7、tp-jwt-auth,一个jwt身份验证扩展包。

本篇文章给大家带来了关于ThinkPHP的相关知识,其中主要整理了使用think-queue实现redis消息队列的相关问题,下面一起来看一下,希望对大家有帮助。

thinkphp查询库是否存在的方法:1、打开相应的tp文件;2、通过“ $isTable=db()->query('SHOW TABLES LIKE '."'".$data['table_name']."'");if($isTable){...}else{...}”方式验证表是否存在即可。

在thinkphp3.2中,可以利用define关闭调试模式,该标签用于变量和常量的定义,将入口文件中定义调试模式设为FALSE即可,语法为“define('APP_DEBUG', false);”;开启调试模式将参数值设置为true即可。


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

PhpStorm 맥 버전
최신(2018.2.1) 전문 PHP 통합 개발 도구

맨티스BT
Mantis는 제품 결함 추적을 돕기 위해 설계된 배포하기 쉬운 웹 기반 결함 추적 도구입니다. PHP, MySQL 및 웹 서버가 필요합니다. 데모 및 호스팅 서비스를 확인해 보세요.

SublimeText3 Linux 새 버전
SublimeText3 Linux 최신 버전

SecList
SecLists는 최고의 보안 테스터의 동반자입니다. 보안 평가 시 자주 사용되는 다양한 유형의 목록을 한 곳에 모아 놓은 것입니다. SecLists는 보안 테스터에게 필요할 수 있는 모든 목록을 편리하게 제공하여 보안 테스트를 더욱 효율적이고 생산적으로 만드는 데 도움이 됩니다. 목록 유형에는 사용자 이름, 비밀번호, URL, 퍼징 페이로드, 민감한 데이터 패턴, 웹 셸 등이 포함됩니다. 테스터는 이 저장소를 새로운 테스트 시스템으로 간단히 가져올 수 있으며 필요한 모든 유형의 목록에 액세스할 수 있습니다.

에디트플러스 중국어 크랙 버전
작은 크기, 구문 강조, 코드 프롬프트 기능을 지원하지 않음
