phpbar.de logo

Mailinglisten-Archive

[php] Suche nach =?iso-8859-1?Q?Datens=E4tzen?= mit PHP3

[php] Suche nach =?iso-8859-1?Q?Datens=E4tzen?= mit PHP3

Arne Babnik babnik_(at)_zems.tu-berlin.de
Tue, 29 Feb 2000 23:27:15 +0100


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