So dann versuche ich doch mal mein Problem zu erklären.. Es gibt folgende Tabelle:
Eine Bachelorarbeit besitzt ein Thema und ein Thema kann mehrere Kategorien haben. Das Speichern der Daten funktioniert auch richtig. So hat z.B. eine Bachelorarbeit das Thema 9 und zum Thema 9 gehören Kategorie 1 und 3.
Es gibt dann eine Seite auf der man ein Thema anklickt und anschließen sieht man eine Combobox. Da stehen alle Kategoriern drin die es so gibt und die Kategoriern, die man für dieses Thema ausgesucht hat, stehen ganz oben in der Combobox und sieht haben eine Rote schrift. Die restlichen Kategorien stehn halt darunter. Das funktioniert auch alles nur die Rote schrift geht nicht da mir ein Vergleichswert fehlt.
Hier mal ein Beispielcode fürs Unternehmen. Hier klappt es nämlich so wie es soll:
Nun der Code für die Kategorien:
Diese Abfrage funktioniert so natürlich nicht, da mir fürs if der Vergleichswert fehlt. Es sollen ja die Kategorien ausgegeben werden, die das Thema 9 haben. Und danach sollen die Kategorien ausgegeben werdem die NICHT das Thema 9 haben und es sollen keine doppelten Kategorien sein.
ich muss $rs2->fields[] ja mit irgendetwas Vergleichen aber irgendwie weiß ich nicht so recht wie ich es machen soll.. In Worten egfasst wäre es ja: Schreibe die Kategorien Rot, die das Thema 9 haben.
So mal sehen wer mein Problem evrsteht und evtl. sogar Lösen kann..
PS: Diese Anfrage liefert das gleiche Problem.
PHP:
CREATE TABLE IF NOT EXISTS `bachelor` (
`BID` int(11) NOT NULL AUTO_INCREMENT,
`HUMID` int(11) DEFAULT NULL,
`DEGID` int(11) DEFAULT NULL,
`THID` int(11) DEFAULT NULL,
`lec_first` int(11) DEFAULT NULL,
`lec_second` int(11) DEFAULT NULL,
PRIMARY KEY (`BID`),
KEY `HUMID` (`HUMID`),
KEY `DEGID` (`DEGID`),
KEY `THID` (`THID`),
KEY `lec_first` (`lec_first`),
KEY `lec_second` (`lec_second`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci
-- --------------------------------------------------------
--
-- Tabellenstruktur für Tabelle `thematic`
--
CREATE TABLE IF NOT EXISTS `thematic` (
`THID` int(11) NOT NULL AUTO_INCREMENT,
`title` varchar(100) COLLATE latin1_general_ci DEFAULT NULL,
`metadata` varchar(300) COLLATE latin1_general_ci DEFAULT NULL,
`preview` varchar(300) COLLATE latin1_general_ci DEFAULT NULL,
`excerpt` varchar(300) COLLATE latin1_general_ci DEFAULT NULL,
`CMP_ID` int(11) DEFAULT NULL,
`CAID` int(11) DEFAULT NULL,
PRIMARY KEY (`THID`),
KEY `CMP_ID` (`CMP_ID`),
KEY `CAID` (`CAID`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci
-- --------------------------------------------------------
--
-- Tabellenstruktur für Tabelle `themahatcat`
--
CREATE TABLE IF NOT EXISTS `themahatcat` (
`THID` int(11) NOT NULL,
`CAID` int(11) NOT NULL,
KEY `THID` (`THID`),
KEY `CAID` (`CAID`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;
-- --------------------------------------------------------
-- Tabellenstruktur für Tabelle `category`
--
CREATE TABLE IF NOT EXISTS `category` (
`CAID` int(11) NOT NULL AUTO_INCREMENT,
`title` varchar(100) COLLATE latin1_general_ci DEFAULT NULL,
PRIMARY KEY (`CAID`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci
Eine Bachelorarbeit besitzt ein Thema und ein Thema kann mehrere Kategorien haben. Das Speichern der Daten funktioniert auch richtig. So hat z.B. eine Bachelorarbeit das Thema 9 und zum Thema 9 gehören Kategorie 1 und 3.
Es gibt dann eine Seite auf der man ein Thema anklickt und anschließen sieht man eine Combobox. Da stehen alle Kategoriern drin die es so gibt und die Kategoriern, die man für dieses Thema ausgesucht hat, stehen ganz oben in der Combobox und sieht haben eine Rote schrift. Die restlichen Kategorien stehn halt darunter. Das funktioniert auch alles nur die Rote schrift geht nicht da mir ein Vergleichswert fehlt.
Hier mal ein Beispielcode fürs Unternehmen. Hier klappt es nämlich so wie es soll:
PHP:
<?php
$sql="SELECT bachelor.thid, company.cmp_id, company.name , thematic.cmp_id FROM bachelor
INNER JOIN (thematic INNER JOIN company
ON thematic.cmp_id = company.cmp_id)
ON bachelor.thid = thematic.thid WHERE thematic.thid = $THID
UNION
SELECT bachelor.thid, company.cmp_id, company.name, thematic.cmp_id FROM bachelor
INNER JOIN (thematic INNER JOIN company
ON thematic.cmp_id != company.cmp_id)
ON bachelor.thid = thematic.thid WHERE thematic.thid = $THID";
$rss = $conn->Execute($sql);
print '<select class="formselect" name="company" size="6" multiple>';
if($rss===false) die(mysql_error());
while(!$rss->EOF){
$option = '<option ';
print $option . ($rss->fields[1] == $rss->fields[3] ? "style= color:red selected=selected" : "") . " value=". $rss->fields[3] ." id=\"test\" > " . $rss->fields[2] . "</option>";
$rss->MoveNext();
}
?>
Nun der Code für die Kategorien:
PHP:
<?php
$sql="SELECT bachelor.thid,thematic.thid,category.title,category.caid,themahatcat.caid
FROM bachelor INNER JOIN(thematic INNER JOIN(themahatcat INNER JOIN category
ON themahatcat.caid = category.caid)
ON thematic.thid = themahatcat.thid)
ON thematic.thid = bachelor.thid WHERE bachelor.thid = $thid
UNION
SELECT bachelor.thid,thematic.thid,category.title,category.caid,themahatcat.caid
FROM bachelor INNER JOIN(thematic INNER JOIN(themahatcat INNER JOIN category
ON themahatcat.caid = category.caid)
ON thematic.thid = themahatcat.thid)
ON thematic.thid = bachelor.thid WHERE bachelor.thid != $thid ";
$rs2 = $conn->Execute($sql);
print '<select id ="test" class="formselect" name="category[]" size="6" multiple>';
if($rs2===false) die(mysql_error());
while(!$rs2->EOF){
$option = '<option ';
print $option . ($rs2->fields[1] == $rs2->fields[3] ? "style= color:red selected=selected" : "") . " value=". $rs2->fields[3] ." id=\"test\" > " . $rs2->fields[1] . "</option>";
$rs2->MoveNext();
}
?>
Diese Abfrage funktioniert so natürlich nicht, da mir fürs if der Vergleichswert fehlt. Es sollen ja die Kategorien ausgegeben werden, die das Thema 9 haben. Und danach sollen die Kategorien ausgegeben werdem die NICHT das Thema 9 haben und es sollen keine doppelten Kategorien sein.
PHP:
$option = '<option ';
print $option . ($rs2->fields[1] == $rs2->fields[3] ? "style= color:red selected=selected" : "") . " value=". $rs2->fields[3] ." id=\"test\" > " . $rs2->fields[1] . "</option>";
ich muss $rs2->fields[] ja mit irgendetwas Vergleichen aber irgendwie weiß ich nicht so recht wie ich es machen soll.. In Worten egfasst wäre es ja: Schreibe die Kategorien Rot, die das Thema 9 haben.
So mal sehen wer mein Problem evrsteht und evtl. sogar Lösen kann..
Ergänzung ()
PS: Diese Anfrage liefert das gleiche Problem.
PHP:
SELECT themahatcat.CAID, category.title FROM themahatcat
INNER JOIN category
ON themahatcat.CAID = category.CAID WHERE THID = $THID
UNION
SELECT themahatcat.CAID, category.title FROM themahatcat
INNER JOIN category
ON themahatcat.CAID = category.CAID WHERE THID !=
Zuletzt bearbeitet: