2016-04-03 17 views
-3

Ich habe eine Reihe von Namen von Instituten in jeder Zeile in meiner Schule Tabelle gespeichert. Die gleiche Tabelle enthält vier verschiedene Kategoriespalten, in denen die Namen der von ihnen angebotenen Themen gespeichert sind. Ich möchte eine Funktionalität ermöglichen, bei der der Benutzer eine Suche auf dem Tisch durchführt, um alle Namen der Institute herauszufinden, die ein bestimmtes Fach unterrichten (zB: Physik). Der Name des bestimmten Subjekts könnte in jeder der vier Spalten category gespeichert werden. Bitte schlagen Sie eine mysqli_/mysql_ Abfrage vor, um eine solche Suche durchzuführen, oder schlagen Sie, falls Sie es wünschen, ein PHP-Skript vor, das die oben genannten Funktionen erfüllt.
EDIT: Ich erwähne die Tabellenstruktur unter:
Table showing column values
Table structureSuche nach einem Schlüsselwort über mehrere Spalten

alle verschiedenen Abfragen Hinzufügen i ohne Ergebnis versucht:

$query = mysql_query("SELECT name FROM institutes WHERE MATCH(category1, category2, category3, category4) AGAINST('$searchq' IN BOOLEAN MODE)") or die(" No records found."); 


$query = mysql_query("SELECT name FROM institutes WHERE $searchq IN(category1, category2, category3, category4)") or die(" No records found."); 


$query = mysql_query("SELECT name FROM institutes WHERE category1 LIKE '%$searchq%' OR category2 LIKE '%$searchq%' OR category3 LIKE '%$searchq%' OR category4 LIKE '%$searchq%' OR category5 LIKE '%$searchq%'") or die(" No records found."); 

Das Suchformular:

<div class="row col-md-6 col-md-offset-2"> 
     <div class="col-lg-6"> 
      <div class="input-group"> 
       <form action="search_results.php" method = "post"> 
        <input type="text" name="search" class="form-control" placeholder="Search by subjects..."> 

       <span class="input-group-btn"> 
        <button class="btn btn-default" type="button submit">Go!</button> 
       </span> 
       </form> 

      </div><!-- /input-group --> 
     </div> 
    </div> 

Der gesamte PHP-Code:

<?php 
    mysql_connect("localhost", "root", "secretpassword") or die("could not connect."); 
    mysql_select_db("edhoc") or die("could not find database."); 
    $result = ""; 

    //collect info from database 
    if(isset($_POST['search'])) { 
     $searchq = $_POST['search']; 
     $searchq = preg_replace("#[^0-9a-z]#i", "", $searchq); 
     //echo $searchq; 

     //SQL query 
     $query = mysql_query("SELECT name FROM institutes WHERE category1 = '$searchq' OR category2 = '$searchq' OR category3 = '$searchq' OR category4 = '$searchq' OR category5 = '$searchq'") or die(" No records found."); 
     $count = mysql_num_rows($query); 
     if($count == 0) { 
      $output = "There's no search result"; 
     } else { 
      while($array = mysql_fetch_assoc($query)) { 
?> 
       <li><?php echo $array['name'];?></li> 
<?php 
      } 
     } 
    } 
?> 

Keiner von ihnen die gewünschte Ausgabe erzeugen. Wenn physics ist die Zeichenkette der Stromausgang:

Physik Keine Datensätze gefunden.

Wenn physics die Suchzeichenfolge ist, die gewünschte Ausgabe ist:

  • Bansal Klassen Studienzentrum
  • Resonance EduVentures Pvt Ltd


+1

Mögliche Duplikate von [Suche über mehrere Spalten] (http://stackoverflow.com/questions/36371155/searching-across-multiple-columns) – NineBerry

+0

Dies ist das dritte Mal innerhalb von 24 Stunden, dass Sie die gleiche Frage stellen. Dies (die gleiche Frage mehrmals zu stellen) wird hier auf Stack Overflow als sehr unhöflich angesehen. – NineBerry

+0

@NineBerry ich entschuldige mich. Ich hatte nicht die Absicht, unhöflich zu sein. Wenn überhaupt, bin ich verzweifelt. – Mickey

Antwort

0

Sie haben den folgenden Befehl ein:

$query = mysql_query("SELECT ....") or die("No records found."); 

Wenn jedoch der Düsenteil ausgeführt wird (wie es der Fall zu sein scheint, weil „Keine Datensätze gefunden“ ausgegeben), dann bedeutet dies nicht, dass kein Datensatz wurde gefunden. Dies bedeutet, dass beim Ausführen der SQL-Anweisung ein Fehler aufgetreten ist. Entweder gibt es einen Fehler in der SQL-Anweisung oder es liegt ein Problem mit der Datenbankverbindung vor.Ändern Sie die Zeile wie diese eine spezifische Fehlermeldung zu erhalten:

$query = mysql_query("SELECT ....") or die(mysql_error()); 

Da die SQL-Anweisung fehlschlägt und trotzdem Sie die gleichen fünf Institutsnamen erhalten aufgelistet (noch vor der Fehlermeldung) bedeutet dies, dass die Liste der Institutsnamen Sie sehen, kommt nicht aus dem PHP-Code in Ihrer Frage, sondern von woanders.

+1

Du hast mir geholfen, es zu reparieren, naja, fast. Aber zuerst werde ich auf meine Fehler reinkommen. Die enthaltene Datei, in der die Datenbank gespeichert war, hatte eine eigene select-Anweisung, die dazu führte, dass alle insti-Namen gedruckt wurden, sobald eine Verbindung hergestellt wurde. Als nächstes entfernte ich den category5-check aus dem Code, den ich achtlos vergessen hatte zu entfernen, nachdem ich die "category5" -Spalte aus der Datenbank gelöscht hatte. Nachdem ich die notwendige Code-Korrektur vorgenommen habe, bekomme ich die richtige Ausgabe, aber für eine Sache. über der Ausgabe gibt es den Text "1Resource ID # 6" Warum wird es angezeigt und wie entferne ich das? – Mickey

+0

Die Ausgabe "1Resource id # 6" bedeutet, dass Sie an einer Stelle eine Variable ausgeben, die den Rückgabewert einer Funktion wie mysql_connect() oder mysql_query() darstellt. Suchen Sie daher nach Stellen, an denen Sie die von diesen Funktionen zurückgegebenen Variablen ausgeben. – NineBerry

+1

Beide waren leichtsinnige Fehler und ich entschuldige mich dafür, alle Zeit zu verschwenden. Ich werde versuchen, in Zukunft intellektuellere Fragen zu stellen. Und irgendwann, wenn ich genug Reputation erhalte, werde ich zurückkommen und deine Antwort verbessern. Danke, und ich hoffe du kannst dir vorstellen, wie erleichtert ich bin. Hinweis für andere neue Benutzer: Poste keine Dankesnachrichten. – Mickey

1

Wir don‘ Wahrscheinlich antwortest du, weil du keine Tischordnung gibst Das ist leicht lesbar, also nehme ich einen an.

Select school from schooltable where subject1=? or subject2=? or subject3=? 

? Ist die Suchanfrage, wenn Sie nicht in der Lage waren, es in PHP zu implementieren, antworten Sie hier und ich werde es für Sie schreiben. Wenn ich dich nicht bekommen habe, ist es dein Problem, dass du nicht genug erklärt hast.

+0

Ich habe die Frage bearbeitet und so viele Informationen wie möglich hinzugefügt (zusammen mit den Tabellenstrukturen). Ja, wenn Sie einen PHP-Code schreiben könnten, der das gewünschte Ergebnis liefert, wird es eine Erleichterung sein. – Mickey

+0

Hast du den gepostet, den ich gepostet habe? – moawaya

+0

Versuchen Sie es wie diese Abfrage = mysql_query ("SELECT Name von Instituten WHERE Kategorie1 = '% $ Searchq%' ODER Kategorie2 = '% $ Searchq%' ODER Kategorie3 = '% $ Searchq%' ODER Kategorie4 = '% $ searchq% 'ODER category5 ='% $ searchq% '") oder sterben (" No records found. "); – moawaya

Verwandte Themen