Vielen Dank für die schnelle Antwort Franzx! Freut mich so rasch willkommen geheißen zu werden.
Nachdem ich vorher mit JOIN noch überhaupt nicht gearbeitet habe, habe ich da offenbar etwas total sinnloses zusammengebastelt bei meinen JOIN-Versuchen. Egal, denn ein Code funktioniert soweit wunderbar! Danke auch dafür.
Und wie ich es mir gedacht habe komme ich um das Problem mit der Kategorie nicht herum. Ich will es noch einmal ausführlicher erklären.
Die Tabellenstrukturen:
Haupttabelle (= "bbdb_beschluesse")
ID_beschluss: primary key auto_increment
antrag_text: text
name_sitzung: varchar(1) - die ID der Tabelle bbdb_name_sitzungen wird gespeichert
arbeitsjahr: varchar(1) - die ID der Tabelle bbdb_arbeitsjahr wird gespeichert
kat1: varchar(1) - die ID der Tabelle bbdb_kategorie wird gespeichert
kat2: varchar(2) - siehe "kat1". Es können pro Datensatz/Beschluss zwei Kategorien vergeben werden
Die Felder die nicht ausgefüllt werden müssen (Nummer der Sitzung, Datum, Anmerkungen) habe ich nicht angeführt.
bbdb_name_sitzungen
ID_name_sitzung: primary key auto_increment
bez_sitzung: text
bbdb_arbeitsjahr
ID_arbeitsjahr: primary key auto_increment
bez_arbeitsjahr: text
bbdb_kategorie
ID_kategorie: primary key auto_increment
name_kategorie: text
Die drei letzten Tabellen gibt es damit im Admin-Bereich die Werte beliebig erweitert werden können (zB wenn die DB über das Arbeitsjahr 2009/10 hinaus genutzt wird) und damit ich sie in den Dropdown-Feldern in den Formularen nicht immer händisch eingeben muss sondern einfach aus der Datenbank lese.
Bevor ich noch zum eigentlichen Problem komme, noch ein paar Worte zur WHERE-Clause, die mir die Beschlüsse suchen soll. Das Suchformular hat folgende Felder: Text des Antrags, Name Sitzung (dropdown), Arbeitsjahr (dropdown), Kategorie (dropdown – nur ein Feld für die Suche), Anmerkungen.
Die WHERE-Clause stückele ich mir über if-Anweisungen in PHP zusammen je nachdem in welchem Feld etwas eingegeben wurde. Der Teil für die Kategorie sieht so aus:
PHP-Code:
if(!empty(suchfeld kategorie))
{
//schauen ob es ein AND benötigt falls auch anderes Feld ausgefüllt wurde
$sql = $sql."(kat1 = '".$_SESSION['suche_kategorie']."' OR kat2 = '".$_SESSION['suche_kategorie']."')";
//speichern, dass dieses Feld ausgefüllt würde für mögliche weitere AND
}
Das Problem sind jetzt meine Felder „kat1“ und „kat2“ in der Haupttabelle. Wie oben erwähnt soll es möglich sein für einen Beschluss 1 bis 2 Kategorien festlegen zu können. Bei der jetzigen Lösung entspricht es glaube ich erstens nicht der zweiten Normalform und wirkt sich so aus, dass bei der von dir vorgeschlagenen SELECT-Lösung mit den INNER JOINs jeder DS nur mit dem verknüpften Wert des Felds „kat1“ ausgegeben wird.
Dass ich im SELECT den INNER JOIN für die Kategorie-Tabelle wie folgt angepaßt habe brachte nur, dass nun jeder DS, welcher zwei zugewiesene Kategorien gespeichert hat, zwei Mal ausgegeben wird – einmal mit dem Wert für „kat1“ und einmal für „kat2“.
PHP-Code:
INNER JOIN bbdb_kategorie ON (bbdb_beschluesse.kat1 = bbdb_kategorie.ID_kategorie OR bbdb_beschluesse.kat2 = bbdb_kategorie.ID_kategorie)
Wie könnte ich hier weiter kommen? Hast du, Franzx, oder jemand anderer eine Idee?
Wiederum freue ich mich, wenn mir jemand helfen kann.
Einstweilen einen schönen Abend noch und bis bald!
Gruß, mrweasel