Heim  >  Artikel  >  Backend-Entwicklung  >  ThinkPHPs Methode zur Implementierung von Abfrage- und Paging-Funktionen für mehrere Tabellen

ThinkPHPs Methode zur Implementierung von Abfrage- und Paging-Funktionen für mehrere Tabellen

墨辰丷
墨辰丷Original
2018-05-21 09:35:281962Durchsuche

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 Paging-Anzeige von Abfrageergebnissen anhand spezifischer Beispiele

Die Details lauten wie folgt:

Die Geschäftslogik des Projekts lautet: Der Lehrer lädt die Testarbeit hoch, legt den Antwortbogen fest und veröffentlicht den Antwortbogen erst danach in der entsprechenden Klasse oder Gruppe Der mit der Prüfungsarbeit verbundene Antwortbogen wird freigegeben. Kann die Prüfungsarbeit in die Systemprüfungsarbeit aufgenommen werden? Nach der Suche können auch andere Lehrer sie abholen. 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[&#39;re_title&#39;] = str_replace($vv, &#39;<font color=\&#39;red\&#39;>&#39; . $vv . &#39;</font>&#39;, $value[&#39;re_title&#39;]);
        }
        if (strpos($value[&#39;rta_title&#39;], $vv) !== FALSE) {
          $value[&#39;rta_title&#39;] = str_replace($vv, &#39;<font color=\&#39;red\&#39;>&#39; . $vv . &#39;</font>&#39;, $value[&#39;rta_title&#39;]);
        }
      }
    }
    $value[&#39;re_created&#39;] = date(&#39;Y-m-d&#39;, $value[&#39;re_created&#39;]);
  }
  echo json_encode($list);
}

Verwandte Empfehlungen:

Einschränkungen in MySQL und Mehrtabellenabfragen und detaillierte Beispiele für Unterabfragen

Python Flask Multi-PairMulti-Table-Abfragendetaillierte Beispiele

Allgemeine MySQL-Grundoperationssyntax (8)~~MehrfachtabellenabfrageErgebnisse zusammenführen und Inner-Join-Abfrage [Befehlszeilenmodus]

Das obige ist der detaillierte Inhalt vonThinkPHPs Methode zur Implementierung von Abfrage- und Paging-Funktionen für mehrere Tabellen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn