Mailinglisten-Archive |
Rene Paschold schrieb: > > Hallo Liste, > > folgendes Problem: Ich soll eine Automarkt Datenbank erstellen. Soweit > kein > Problem. Jetzt soll aber auch nach dem Feld EXTRAS gesucht werden. > Der Händler kann ein Auto anlegen und Extras mit Checkboxen auswählen. > Die Extras will ich aus einer separaten Tabelle holen. Es gibt also > zwei Tabellen: > Autos und Extras. > > Extras würde so aussehen: > ----------------|------------------ > ExtraID | ExtraWERT > ----------------|------------------ > > Autos ungefähr so: > ---------|--------------|-----------------|------------|------------|- > ----------------- > AutID | AutMAR | AutoMOD | AutKM | AutoBJ | AutDM > ---------|--------------|-----------------|------------|------------|- > ----------------- > > Am Anfang dachten wir das wir am Ende der Auto Tabelle einen String > zusammensetzten der aus der ID der Extras besteht. Mittels CheckBoxen > werden > die IDs zu einem String zusammengefasst und in das Feld AutEXTRAS > geschrieben (Danke Armin): > > for($i=0; $i<count($extra_arr);$i++) { > echo "Inhalt des Array extr_arr[$i]: ".$extra_arr[$i]."<br>"; > $extra_str = $extra_str.",".$extra_arr[$i]; > } > echo "<br><br>"; > echo "Inhalt des Strings extr_str: ".$extra_str." (Komma vor > String)"; > $extra_str_fertig = substr($extra_str, 1); > echo "<br><br>"; > echo "Inhalt des Strings extra_str_fertig: > ".$extra_str_fertig."(Kommata beseitigt, auch evtl. hinter-Komma)"; > > Hier ergibt sich aber jetzt folgendes Problem: String z.B.: > 2,45,56,88,99 !! > Jetzt soll aber auch eine Suchfunktion mittels Checkboxen passieren. > Wie > kann ich jetzt den Datensatz ermitteln der die ausgewählten Extras > beinhaltet?? > z.B. 56,99 oder 2,56 ! > Hallo, Rene, von einer derartigen Lösung würde ich auf jeden Fall abraten, weil damit nämlich der Sinn eines Datenbankservers ad absurdum geführt wird - eine kombinierte Suche ist damit nicht mehr sinnvoll möglich (was machst du, wenn du nach Extra Nr. 2 gesucht wird ? MySQL findet dann auch 21,22,23,24,32,42 etc.). Die IMHO sinnvollste Lösung wäre es, beide Tabellen über eine dritte zu verknüpfen: LinkID | AutoID | ExtraID --------+------------+---------- Eine Suche kann dann einfach erfolgen durch SELECT * FROM linktable LEFT JOIN extras ON linktable.extraid=extras.extraid WHERE extraid IN (1,2,3) GROUP BY autoid Das Ergebnis ist eine Tabelle mit jeweils einer Zeile pro Auto, auf das die Extrasuche zutrifft. 1,2,3 ist eine Liste der Extra-ID's, nach denen gesucht wird. Den "Extrawert" in deiner obigen Tabelle kannst du weglassen (der wird eh mit dem ID-Wert übereinstimmen, oder nicht ?), aber stattdessen eine Beschreibung als VARCHAR dazusetzen. Viele Grüße, Arne
php::bar PHP Wiki - Listenarchive