Beispiel für eine thinkPHP-Abfragemethode mit mehreren Tabellen

小云云
Freigeben: 2023-03-20 07:58:02
Original
1240 Leute haben es durchsucht

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[&#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);
}
Nach dem Login kopieren


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!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage