如何过滤多个数据库表的查询结果

How to filter query results of multiple database tables

我正在尝试向涉及单个数据库中的 3 个不同数据库 table 的查询添加过滤器。

我最初能够创建一个我试图获取的信息的完整列表,并使用以下代码将其循环到 table 中。

 <?php
   global $wpdb;
   $result = $wpdb->get_results("SELECT * FROM meetings, new_meetings WHERE Type = '$type' ORDER BY code, Unit, Number");
     // $query = "SELECT * FROM meetings, new_meetings WHERE Type = '$type' ORDER BY code, Unit, Number";
     // $result = $wpdb->get_results($query);
 ?>

 <?php foreach ( $result as $query ) {
 ?>

 // Table Loop Here

 <php
   }
 ?>

但是,当尝试将代码更改为下面的代码时,我没有看到任何结果。我哪里出错了,我该如何纠正?

 <?php
   global $wpdb;
   $userid = $current_user->user_login;
   $type = $wpdb->get_results( "SELECT type FROM dbtable1 WHERE Member = '$userid'"); //
     // $membertype = "SELECT type FROM dbtable1 WHERE Member = '$userid'";
     // $type = $wpdb->get_results($membertype);

   $result = $wpdb->get_results("SELECT * FROM meetings, new_meetings WHERE Type = '$type' ORDER BY code, Unit, Number");
      // $query = "SELECT * FROM meetings, new_meetings WHERE Type = '$type' ORDER BY code, Unit, Number";
      // $result = $wpdb->get_results($query);
   }
 ?>

 <?php foreach ( $result as $query ) {
 ?>

 // Table Loop Here

 <?php
 }
 ?>

这是循环。 (为简单起见删除了样式元素)

 <table>
   <tr>
     <th>Member Type</th>
     <th>Date</th>
     <th>Location</th>
     <th>Description</th>
     <th>Contact Info</th>
   </tr>
   <tr>
     <td><?php echo $query->Type; ?></td>
     <td><?php if($query->Date!=""){echo date('m/d/y', strtotime($query->Date)); } ?></td>
     <td><?php echo $query->Location; ?></td>
     <td><?php echo $query->Desc; ?></td>
     <td><?php echo $query->Info; ?></td>
   </tr>
 </table>

我在两个页面上使用相同的循环,但是当我查看第一个代码片段

所在的页面时,第二个代码片段没有在前端填充任何内容

在第一个代码片段中,我能够加载所有会议和所有成员类型的新会议,但是在第二个代码片段中,我尝试添加额外的 sql 查询以过滤结果取决于登录用户的特定成员类型似乎没有产生任何结果,即使我可以在 mysql 中看到结果。

如何编辑第二个代码片段,以便为特定 "Type" 成员正确过滤第一个片段结果。

好的,我已经成功实现了我的目标,现在页面上显示了过滤后的结果。

我已经在下面描述了我必须进行的更改以及我使用的代码

最后,虽然查询更高级一点,但生成的语句更清晰,使用的代码行更少,这是一个好处。

我不得不从创建多个单独的查询改为使用 "INNER JOIN" 关键字将它们全部合并为一个查询。

从那里开始,就像连接在各个表中具有匹配值的正确记录一样简单。

这里再次引用旧代码

 <?php
    global $wpdb;
    $result = $wpdb->get_results("SELECT * FROM meetings, new_meetings WHERE Type = '$type' ORDER BY code, Unit, Number");
      // $query = "SELECT * FROM meetings, new_meetings WHERE Type = '$type' ORDER BY code, Unit, Number";
      // $result = $wpdb->get_results($query);
  ?>

 <?php
    global $wpdb;
    $userid = $current_user->user_login;
    $type = $wpdb->get_results( "SELECT type FROM dbtable1 WHERE Member = '$userid'"); //
      // $membertype = "SELECT type FROM dbtable1 WHERE Member = '$userid'";
      // $type = $wpdb->get_results($membertype);

    $result = $wpdb->get_results("SELECT * FROM meetings, new_meetings WHERE Type = '$type' ORDER BY code, Unit, Number");
       // $query = "SELECT * FROM meetings, new_meetings WHERE Type = '$type' ORDER BY code, Unit, Number";
       // $result = $wpdb->get_results($query);
    }
  ?>

  <?php foreach ( $result as $query ) {
  ?>

这里是修改后的查询。

<?php
global $wpdb;
$userid = $current_user->user_login;
$result = $wpdb->get_results("SELECT * FROM meetings as A inner join dbtable1 as B on A.Type = B.Type inner join new_meetings as C on C.Type = A.Type where B.Member = '$userid'");
 // $query = "SELECT * FROM meetings as A inner join dbtable1 as B on A.Type = B.Type inner join new_meetings as C on C.Type = A.Type where B.Member = '$userid'";
// $result = $wpdb->get_results($query);
  ?>

  <?php foreach ( $result as $query ) {
  ?>
 // Table Loop Here

  <?php
  }
  ?>

结果将仅提取当前登录会员成员类型出现在我们在查询语句中声明的特定列中的特定行。

希望这对其他人有用,就像我研究它一样:)