Mysql Abfrage per Array

blck

Mitglied
Hallo,
ich habe hier eine Datenbank und ein Suchinterface, dass per HTML gemacht wurde und größtenteils aus Checkboxen besteht. Was ich nun möchte, wäre folgendes:
Jede Checkbox, die aktiviert ist, wird in ein PHP-Array geschrieben. Diese Array wird dann in einer mysql_query dazu genutzt alles auszugeben:
PHP:
$abfrage = mysql_query("SELECT *alles mögliche* FROM tabelle WHERE *inhalt von aktiviertes checkboxarray* LIKE "%$suche%"

Habt ihr eine Idee oder ein paar Tips wie ich das realisieren kann? Also ob das so überhaupt möglich ist?!

MfG Blck
 
Hi,

klar ist das möglich. Hier ein Beispiel:
PHP:
$array = array ('feld1', 'feld2', 'feld3'); // Alle Werte aus der Checkbox
$word = 'fuubar'; // Suchwort

$sqlQuery = 'SELECT *alles mögliche* FROM `table` WHERE';

$fields = count ($array); // Anzahl der angeklickten Checkboxen

    // Alle Werte aus $array durchlaufen und zum Sql-Statement hinzufügen:
    for ($i = 0; $i < $fields; $i++)
    {
        $sqlQuery .= ' `' . $array[$i] . '` LIKE %' . $word . '%';

        if ($i != $fields - 1)
        {
            $sqlQuery .= ' OR';
        }
    }

print $sqlQuery; // Testausgabe
 
Hallo,
vielen Dank für deine Antwort. Die Funktionsweise ist mir grundsätzlich klar, nur:
PHP:
        if ($i != $fields - 1)
        {
            $sqlQuery .= ' OR';
        }
Bei dem Teil habe ich noch meine Probleme, es zu verstehen. Wozu eine OR-Abfrage.

MfG Blck
 
Hi,

wenn $sqlQuery geparst wird, sieht das im ersten durchlaufen der Schleife etwa so aus:
PHP:
$sqlQuery .= ' `feld1` LIKE "%foobar%"';


Würde man $sqlQuery .= ' OR'; weglassen, sähe $sqlQuery beim zweiten durchlaufen etwa so aus:
PHP:
$sqlQuery .= ' `feld1` LIKE "%foobar%" `feld2` LIKE "%foobar2%"';


Zwei oder mehrere Bedinungen im Sql-Statement müssen aber mit OR oder AND verknüpft werden.
Im Beispiel sieht das dann etwa so aus, was auch korrekt wäre:
PHP:
$sqlQuery .= ' `feld1` LIKE "%foobar%" OR `feld2` LIKE "%foobar2%"';


Mit if ($i != $fields - 1) stellt man sicher, dass OR nicht hinter der letzten Bedinung steht, was einen Sql-Fehler zur Folge hätte.

Ich hoffe es ist nun etwas klarer ;)
 
Zuletzt bearbeitet:
Jop das macht Sinn. Eine letze Frage noch: Wie spreche ich alle Felder der Tabelle an, also anstatt *alles mögliche*? Das geht doch per Wildcard oder, sprich ' * '.
Vielen Dank
 
Zuletzt bearbeitet:
Zurück