2017-08-12 3 views
0

Ich versuche, einen Filter zu einer Abfrage hinzuzufügen, die 3 verschiedene Datenbanktabellen in der einzelnen Datenbank enthält.Filtern von Abfrageergebnissen mehrerer Datenbanktabellen

Ich war in der Lage, zunächst eine vollständige Liste der Informationen, die ich erhalten wollte, zu erstellen und sie mit dem folgenden Code in eine Tabelle zu schreiben.

Allerdings, wenn ich versuche, den Code zu ändern, was ich unten habe, sehe ich keine Ergebnisse. Wo bin ich falsch gelaufen und wie würde ich das korrigieren?

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

Hier ist die Schleife. (Fallen gelassen Styling-Elemente der Einfachheit halber)

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

Ich verwende die gleiche Schleife auf beiden Seiten jedoch der zweite Code-Snippet bevöl nichts auf dem Frontend, wenn ich die Seite, wo der erste Code-Schnipsel

In das erste Code-Snippet Ich kann alle Meetings und neue Meetings aller Member-Typen laden, aber das zweite Code-Snippet, das ich versucht habe, eine zusätzliche SQL-Abfrage hinzuzufügen, um die Ergebnisse auf einen bestimmten Mitgliedstyp herunterzufiltern, abhängig vom angemeldeten Benutzer scheint nicht zu Ergebnissen zu führen, obwohl ich in mysql die Ergebnisse sehen kann.

Wie kann ich das zweite Code-Snippet bearbeiten, um die ersten Snippet-Ergebnisse für einen bestimmten "Typ" des Mitglieds korrekt zu filtern.

+0

Was ist in Ihrem '$ type' Variable? Ich sollte Ihrem "$ Ergebnis" ähnlich sein. Daher müssen Sie den benötigten Wert von '$ type 'abrufen, bevor Sie i der zweiten Abfrage bereitstellen können ... –

+0

Es gibt drei Arten von Mitgliedern: Die erste Abfrage lädt nur alle Besprechungen und neuen Besprechungen, unabhängig davon, welcher Elementtyp Du bist. Das hat gut funktioniert. Wenn ich jedoch oben die Typvariable hinzugefügt habe, bekomme ich überhaupt kein Ergebnis. – DigitalDesigner

+0

Bitte erläutern Sie, welches Ergebnisset Sie suchen. Bitte geben Sie auch die Tabellenstruktur und die Beziehung für die 3 Tabellen an. – Goldbug

Antwort

0

OK, damit ich mein Ziel erfolgreich erreichen konnte und nun die gefilterten Ergebnisse auf der Seite erscheinen ließ.

Ich habe die Änderungen beschrieben ich den Code machen musste und ich unter

Am Ende jedoch ein wenig weiter fortgeschritten einer Abfrage die resultierende Aussage Reiniger viel auch weniger Codezeilen verwendet, die eine war Bonus.

Ich musste mehrere separate Abfragen erstellen und sie alle in eine einzige Abfrage mit dem Schlüsselwort "INNER JOIN" gipfeln.

Von dort war es so einfach wie das Verbinden der richtigen Datensätze, die übereinstimmende Werte innerhalb der verschiedenen Tabellen hatten.

Hier ist der alte Code wieder als Referenz

<?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) { 
    ?> 

Und hier ist die überarbeitete Abfrage.

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

Das Ergebnis wird nur die spezifischen Reihen ziehen, wo die Mitglieder Mitgliedsart angemeldet Strom innerhalb der bestimmten Spalte vorhanden ist, wir in der Abfrage-Anweisung angegeben haben.

Hoffe, dass dies für andere nützlich sein wird, wie es für mich war :)

Verwandte Themen