2016-07-06 4 views
0

Ich habe drei verschiedene Tabelle in meiner Datenbank, die ich Inhalte von allen der Tabelle suchen, müssen aber nicht funktioniert, weil es verschiedene AttributePhp-Code aus mehreren Tabellen in databse suchen

hier ist meine Tabellenstruktur hat

Tabelle 1 Name >> Blogpost

| bid | title  | body   | author | 
|----- |------- |------------- |-------- | 
| 1  | new  | hello new  | you  | 
| 2  | cast  | broadcast  | me  | 
| 3  | hack  | who hack us | you  | 

table2 Name >> forumnew

| fid | ftitle | fbody   | user | 

|----- |------- |------------- |-------- | 
| 1  | new forum | hello new  | you  | 
| 2  | cast me | broadcast  | me  | 
| 3  | hack you | who hack him | us  | 

table3 Name >> Download

| did | file  | disc   | type  | 

|----- |------- |------------- |-------- | 
| 1  | whoweare | hello new  | php  | 
| 2  | cast  | broadcast  | html  | 
| 3  | hack  | who hack us | c++  | 

ich diesen PHP-Code verwenden, um von einzelnen Tabelle wählen

<?php 
if(isset($_GET['postid'])){ 
$search = $_GET['postid']; 


    $output; 

    if(!empty($search)){ 
     $dsn = new DBController(); 
     $dsn->prepare("SELECT * FROM blogpost WHERE title LIKE :search LIMIT 10"); 
     $dsn->bind(':search', '%'.$search.'%'); 
     $dsn->execute(); 
     $output = $dsn->getAll(); 
     $dsn->free(); 
    } 

    if(!is_null($output)): 
     $html = ''; 
     foreach($output as $i => $row){ 
      $id = $row->bid; 
      $title = $row->title; 
      $cont = $row->body; 
      $html .= '<article> <div class="spacer js-gps-track"> 
    <a href="'.$id.'" class="readmore related ret">'.$title.'</a> 
$body 
</div></article>'; 
     } 
     echo $html; 
    else: ?> 
<h5 style="color: #2f2f2f;">No related search found</h5><br/> 
<?php endif; 
}?> 
+0

Bearbeiten Sie Ihren Beitrag, um anzuzeigen, welche Felder mit anderen Tabellen übereinstimmen und fügen Beispiel der Suchbegriffe mit erwarteten Ergebnissen hinzu – dbmitch

+0

Nice @dbmitch Ich habe versucht, diese Tabelle zu bekommen, aber nicht funktioniert – Frank

+0

@dbmitch, wie meine Tabellenstruktur aussehen – Frank

Antwort

0

Sie haben ein paar Optionen hier:

  • Verwenden drei separate Abfragen
  • Verwenden Sie ein UNION

Ein Beispiel aus der Spitze von meinem Kopf, wie man eine Vereinigung tun können, ist wie folgt:

SELECT 
    * 
FROM (
    (SELECT 'post' AS type, bid AS id, title, body AS description, author AS owner FROM blogpost) AS search_posts 
    UNION 
    (SELECT 'forum' AS type, fid AS id, ftitle AS title, fbody AS description, user AS owner FROM forumnew) AS search_forum 
    UNION 
    (SELECT 'download' AS type, did AS id, file AS title, disc AS description, type AS owner FROM download) AS search_downloads 
) 
WHERE title LIKE :search 
    OR description LIKE :search 

Der Trick ist, Daten aus allen drei Tabellen in einen Satz wählen von Spalten mit dem gleichen Namen.

+0

wünschen, also kann ich Suchergebnis mit diesen 'Inhaber' und 'Beschreibung' und 'Titel' und' Identifikation' zurückbringen ? Was ist mit Post, Forum und Download am Anfang? – Frank

+0

Ich habe gerade das Feld 'type' hinzugefügt, damit Sie erkennen können, aus welcher Tabelle der Datensatz stammt. Sie brauchen vielleicht nicht einmal oder kümmern sich sogar darum, woher es kommt. –

+0

Ich teste es einfach und bekomme zu viele Fehler Ich muss 'Inhalt TYPE, DESCRIPTION und AUTHOR' als Suchergebnis ausgeben – Frank