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