SQL Suche richtige Abfrage

-Rayz-

Lieutenant
Registriert
Okt. 2010
Beiträge
909
So dann versuche ich doch mal mein Problem zu erklären.. Es gibt folgende Tabelle:
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:
Du meinst deine Hausaufgabe?

Versuch mal zuerst die Abfrage im SQL Managment Studio (beziehe mich net auf MS sachen) auszuführen um zu sehen ob es vielleicht nicht in der SQL abfrage das Problem liegt... sonst viel spass damit.

Das was du hier schreibst ist ehe eine Aufforderung das Problem zu lösen! Hier sind die leute nicht dafür da um irgendwelche Aufforderungen nachzugehen, sondern um zu helfen. Wenn du selbst keine Ahnung hast was du machst, weil du vielleicht rauskopiert hast, dann solltest du erstmal mit den Grundlegenden sachen dich beschäftigen!
 
Was ist denn das für eine Antwort? Es ist keine Hausaufgabe und ich habe nirgendwo IRGENDETWAS KOPIERT!! Die Tabellen habe ich mit phpmyadmin angelegt und lediglich exportiert um den Code hier zu zeigen. Aber danke für deine hilfreiche Antwort ich hab es halt nun so gelöst:

PHP:
	<?php
					
						$sql="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 != $THID";
						$rs2 = $conn->Execute($sql);
						
						$sql = "SELECT themahatcat.CAID FROM themahatcat 
							INNER JOIN category 
							ON themahatcat.CAID = category.CAID WHERE THID = $THID";
						$r2 = $conn->Execute($sql);
						print '<select id ="test" class="formselect" name="category[]" size="6" multiple>';
						if($rs2===false && $r2 ===false) die(mysql_error());						
							while(!$rs2->EOF){
								$option = '<option ';								
									print $option . ($r2->fields[0] == $rs2->fields[0] ? "style= color:red selected=selected" : "") . " value=". $rs2->fields[3] ."  id=\"test\" >" . $rs2->fields[1] . "</option>";
									$rs2->MoveNext();	
									$r2->MoveNext();
							}			
					?>
 
siehst du... wenn man versucht kommt man auch schneller an die Lösung anstatt auf die anderen zu warten :D

Beim nächten mal die leute fragen und nicht fordern eine Lösung zu finden und vielleicht auch voraus bedanken... Manieren muss man ja auch haben ;)

Aroganz ist kein guter Charakterzug!
 
Also eine Aufforderung habe ich nirgends gegeben. Ich war nur besorgt darüber, dass man mein Anliegen gar nicht versteht da ich mit der Formulierung probleme hatte. Auf Lösungen warten tue ich eh nicht nur habe ich 7 Stunden an dieser SQL Abfrage gearbeitet da ich die eigentlich nur eine Abfrage wollte und nicht zwei so wie ich es nun gemacht habe.. Aber das im voraus bedanken hätte ich wirklich machen können ^^ Tut mir leid wenn der Thread falsch rüber gekommen ist.
 
Zurück
Oben