Inner Join funktioniert nicht

danielmueller

Gesperrt
Ich verzweifle langsam ich möcht zwei Tabellen gleichzeitig abfragen, dazu muss ich glaube ich inner Join verwenden momentan sieht meine query so aus:
PHP:
$sql = "SELECT DISTINCT `Content`.`ID`, `Content`.`Section`, `Content`.`Title`, `Kategorien`.`Kategorie`, "
	   ."CONCAT(
              DATE_FORMAT(`Content`.`Date`, '%e. '),
              ELT(MONTH(`Content`.`Date`), 'Januar', 'Februar', 'März', 'April', 'Mai', 'Juni', 'Juli', 'August', 'September', 'Oktober', 'November', 'Dezenber'),
              DATE_FORMAT(`Content`.`Date`, ' %Y, %H:%i:%s')
            ) AS `DATUM`"
	   ."FROM `Content`, `Kategorien` "
	   ."INNER JOIN `Content` ON `Content`.`Kategorie`=`Kategorien`.`ID` "
	   ."WHERE `Content`.`Title` LIKE '%".$_SESSION['search']."%'"
	   ."OR `Content`.`Section` LIKE '%".$_SESSION['search']."%' "
	 #  ."&& `Content`.`Kategorie`=`Kategorien`.`ID` "
	   ."ORDER BY Datum ".$showorder." LIMIT ".$start.", ".$_SESSION['max_e'];
Ich bekomme immer die Fehlermeldung, dass Content keine "unique" Tabelle wäre.
Im grunde genommen ist es so, (vereinfacht)
Content
-ID
-Titel
-Kategorie

Kategorien
-ID
-Kategorie
-Beschreibung

In Content.Kategorie steht nun irgendeine Zahl die genau mit Kategorie.ID übereinstimmt es kann vorkommen, dass mehrer Content.ID Spalten gibt die mit einer Kategorie übereinstimmen diese sollen dann trotzdem mit ausgegeben werden da sie dann leichter zu verarbeiten sind.
Genau das kann man doch mit Joins machen irgendwie scheine ich das aber noch nicht so ganz verstanden zu haben.
 
Irgendwie verstehe ich aber glaube ich das Grundprinzip von Joins nicht ich versuche mal ein kleines Beispiel zu machen und mit meinen eigenen Worten wiederzugeben was Join gemacht hat wäre nett wenn ihr mich mal korregieren könntet, ich beziehe mich dabei auf das oben vereinfachte Beispiel:

PHP:
$sql="SELECT `Content`.`ID` AS `ID`, `Content`.`Titel` AS `Titel`, "
	."`Kategorien`.`Kategorie` AS `Kategorie`, " 
	."`Kategorien`.`Beschreibung` AS `Beschreibung` "
	."FROM `Content` "
	."LEFT JOIN `Kategorie` ON `Content`.`Kategorie`= `Kategorien`.`ID` "
Die Entsprechenden Spalten werden ausgeählt und einem Begriff für die Ausgabe zugeordnet.
Anschließend wird die Haupttabelle ausgwählt, immer wenn nun `Content`.`Kategorie`= `Kategorien`.`ID` ist, dann wird die entsprechende Spalte von Kategorie noch an die Tabelle Content "angelegt" und die entsprechenden Felder ( `Kategorien`.`Kategorie` und `Kategorien`.`Beschreibung`) mit ausgegeben.
In wie fern ist meine Therorie korrekt?
 
ich würde es so machen:


$sql="SELECT C.ID, C.Titel, K.Kategorie, K.Beschreibung FROM Content AS C LEFT JOIN Kategorie AS K ON (C.Kategorie= K.ID) WHERE ....."
 
Zurück