2017-08-12 14 views
0

単一データベース内の3つの異なるデータベーステーブルを含むクエリにフィルタを追加しようとしています。複数のデータベーステーブルのクエリ結果をフィルタリングする方法

私は取得しようとしていた情報の完全なリストを最初に作成し、次のコードを使用してテーブルにループすることができました。

<?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 
} 
?> 

ここにループがあります。私は最初のコードがで

スニペットページを表示するときに、第2のコードスニペットは、フロントエンドには何も移入されていませんが

<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クエリを追加しようとした2番目のコードスニペット私は結果がそこにあることを私がmysqlで見ることができますが、結果を生成するように見えません。

メンバの特定の「タイプ」の最初のスニペット結果を正しくフィルタリングするために、2番目のコードスニペットを編集するにはどうすればよいですか。

+0

あなたの '$ type'変数には何がありますか?私はあなたの '$ result'に似ているはずです。したがって、2番目のクエリにiを供給する前に、 '$ type'から必要な値を取得する必要があります。 –

+0

3つのタイプのメンバがあります。最初のクエリは、メンバタイプあなたはそうです。これはうまくいった。しかし、上記の型変数を追加しても、結果はまったくありません。 – DigitalDesigner

+0

あなたが探している結果セットを説明してください。また、3つのテーブルのテーブル構造と関係を提供してください。 – Goldbug

答えて

0

これで正常に目標を達成でき、フィルタリングされた結果がページに表示されるようになりました。

私がしなければならなかったの変更および照会のもう少し高度得られた文があったコードの少ない行を使用してもはるかにクリーンであるが、私が最後に

下に使用されるコードを記載していますボーナス。

複数の個別のクエリを作成することから、"INNER JOIN"というキーワードを使用してすべてを1つのクエリに集約する必要がありました。

そこから、さまざまなテーブル内で一致する値を持つ正しいレコードを接続するだけで簡単でした。

はここで参照

<?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 
    } 
    ?> 

結果は、メンバーのメンバーの種類の現在のログに記録されたが、我々は、クエリ文の中で述べられている特定の列内に存在する特定の行のみを引っ張ってきます。

これは私にとってそれを研究していた人にとって役に立ちます。

関連する問題