In diesem Artikel wird hauptsächlich die Implementierungsmethode der ThinkPHP-Multitabellenabfrage und Paging-Funktion vorgestellt. Er analysiert die zugehörigen Implementierungstechniken der ThinkPHP-Multitabellenabfrage und der Paging-Anzeige von Abfrageergebnissen anhand spezifischer Beispiele Ich hoffe, es kann jedem helfen.
Die Geschäftslogik des Projekts ist: Der Lehrer lädt die Testarbeit hoch, legt den Antwortbogen fest und veröffentlicht den Antwortbogen erst dann für die entsprechende Klasse oder Gruppe, nachdem der mit der Testarbeit verknüpfte Antwortbogen veröffentlicht wurde Die Testarbeit kann im System Testarbeit gesucht werden. Gleichzeitig können andere Lehrer sie auch sammeln. Im Front-End-Sammlungsmodul gibt es ein Eingabefeld, um Benutzern Suchfunktionen bereitzustellen. In der vorgefertigten Suchtabelle ist jedoch nur eine Testpapier-ID mit der Testpapiertabelle verknüpft Sucht der Benutzer nach dem Titel der Testarbeit? Anstatt zwei Tabellen abzufragen, bestand die Methode, die ich mir zunächst ausgedacht hatte, darin, der Sammlungstabelle ein zusätzliches Feld hinzuzufügen, d. h. die Felder der Testarbeitsfragen zur Sammlungstabelle hinzuzufügen Das Geschäft ist abgeschlossen. Als ich mich heute mit der Logik des Fragenbank-Sharings beschäftigte, entdeckte ich dieses Problem erneut. Ich sah, dass die von meinem Kollegen entworfene Sharing-Tabelle nur eine Fragenbank-ID hatte, also rief ich meinen Kollegen an, um es zu „korrigieren“, aber vorher Ich wollte immer noch die Designideen meines Kollegen hören. Mein Kollege sagte, es sei eine Tabellenabfrage. Deshalb habe ich mich direkt mit meinem Fehler auseinandergesetzt. Die Prämisse besteht natürlich darin, über meinen eigenen zu sprechen. Die Idee ist nicht ganz richtig, wenn ich darüber nachdenke, daher werde ich unten den entsprechenden TP-Code angeben.
// 异步请求试卷夹下某一个试卷夹的列表 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); }
Verwandte Empfehlungen:
Einschränkungen, Mehrtabellenabfragen und Unterabfragen in MySQL im Detail Erläuterung der Beispiele
ThinkPHP-Mehrtabellenabfrage – wenn Feld A gleich ist, Feld B hinzufügen_PHP-Tutorial
thinkphp-Studiennotizen Multitabelle Abfrage, Thinkphp-Studiennotizen_PHP-Tutorial
Das obige ist der detaillierte Inhalt vonBeispiel für eine thinkPHP-Abfragemethode mit mehreren Tabellen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!