[MySQL] Inner Join

traffic

Well-known member
5 Mai 2006
675
25
Hallo,

komm gerade nicht weiter, bekomme immer folgenden fehler:

Code:
PHP:
$result = mysql_query("SELECT
    artikel_motortypen.*
FROM
    artikel_stammdaten INNER JOIN
    hersteller ON (artikel_stammdaten.hersteller = hersteller.id)
WHERE
    artikel_motortypen.typ ='$typ'
GROUP BY
    hersteller.hersteller
") or die(mysql_error());

Meldung:
Unknown table 'artikel_motortypen'


Jedoch existiert diese Tabelle

Weiß jemand was ich verkehrt mache?

Gruss
 
Sie mag existieren, aber sie steht weder bei FROM, noch bei JOIN dabei, wird also auch nicht abgerufen ;)
 
probier doch einfach mal folgendes:

PHP:
$result = mysql_query("SELECT *
FROM
    artikel_stammdaten a INNER JOIN
    hersteller h ON (a.artikel_stammdaten.hersteller = h.hersteller.id)
WHERE
    a.artikel_motortypen.typ ='$typ'
GROUP BY
    h.hersteller.hersteller
") or die(mysql_error());

ich weiß "SELECT *" macht man nicht, aber zum testen und Fehler suchen is es schon ok ;)
 
probier doch einfach mal folgendes:

PHP:
$result = mysql_query("SELECT *
FROM
    artikel_stammdaten a INNER JOIN
    hersteller h ON (a.artikel_stammdaten.hersteller = h.hersteller.id)
WHERE
    a.artikel_motortypen.typ ='$typ'
GROUP BY
    h.hersteller.hersteller
") or die(mysql_error());

ich weiß "SELECT *" macht man nicht, aber zum testen und Fehler suchen is es schon ok ;)

dann kommt:

Unknown table 'a.artikel_motortypen' in where clause
 
die anderen existieren jedoch auch
Hab dir doch nicht widersprochen :hö:

Ich sagte, du sollst die Tabelle abrufen, wenn du sie verwenden möchstest.
Ob die Lösung für dich passend is, weiß ich ned, weil ich die Tabellen ned einordnen kann.
Code:
[FONT=Courier New][B][COLOR=#9932cc]SELECT[/COLOR][/B]
    artikel_motortypen.*
[B][COLOR=#9932cc]FROM[/COLOR][/B]
    artikel_stammdaten[B][COLOR=Red],
    artikel_motortypen[/COLOR][/B]
[B][COLOR=#9932cc]INNER[/COLOR][/B] [B][COLOR=#9932cc]JOIN[/COLOR][/B]
    hersteller [B][COLOR=#9932cc]ON[/COLOR][/B] (artikel_stammdaten.hersteller = hersteller.id)
[B][COLOR=#9932cc]WHERE[/COLOR][/B]
    artikel_motortypen.typ ='$typ'
[B][COLOR=#9932cc]GROUP[/COLOR][/B] [B][COLOR=#9932cc]BY[/COLOR][/B]
    hersteller.hersteller [/FONT]
 
Hab dir doch nicht widersprochen :hö:

Ich sagte, du sollst die Tabelle abrufen, wenn du sie verwenden möchstest.
Ob die Lösung für dich passend is, weiß ich ned, weil ich die Tabellen ned einordnen kann.
[...]
so klappt es leider nicht.

Zur erklärung:
Er soll inder Tabelle artikel_motortypen suche wo typ=$typ

Dann soll er mir aus artikel_stammdaten die hersteller(sind nur id's) ausgeben wo id=artikel_motortypen.artikelid
 
mach doch mal kurz nen mysql-dump, also zeig mal wie die DB struktur ist.
vielleicht kommen wir dann auf die Lösung.
 
hab es jetzt alleine hin bekommen :)

PHP:
$result = mysql_query("SELECT a.typ, b.hersteller FROM artikel_motortypen a
 INNER JOIN artikel_stammdaten b ON a.artikelid = b.id WHERE a.typ=$typ GROUP BY b.hersteller");

vielen dank für eure vorschläge, so konnte ich es besser verstehen.
 
hab jetzt leider das nächste problem

PHP:
$result = mysql_query("SELECT a.typ, b.kategorie FROM artikel_motortypen a
INNER JOIN artikel_stammdaten b ON a.artikelid=b.id WHERE a.typ=$typ AND b.kategorie='$kat'") or die(mysql_error());

mit mysql_num_rows sagt er mir, dass er 20 reihen gefunden hat.
wenn ich ich nun echo"$row[id]" mache, gibt er gar nichts aus und wenn ich $row[0] gibt er immer das gleiche aus...was mache ich verkehrt?
 
wenn ich dann $row[id] ausgeben lasse kommt nicht
Woher denn auch ? :hö:

Nur $row['typ'] und $row['kategorie'], sowie äquivalent $row[0] und $row[1] sind gesetzt.

Selbes Spielchen: Willst du die ID haben, selektiere sie aus der Datenbank.

P.S. Nicht-numerische Arrayindezes sind in Hochkommata zu setzen.
 
Hallo,

bin zur Zeit so weit, dass alles funktioniert:

PHP:
$result = mysql_query("SELECT a.artikelid, b.kategorie FROM artikel_motortypen a
INNER JOIN artikel_stammdaten b ON a.artikelid=b.id WHERE a.typ='$typ' AND b.kategorie='$kat'") or die(mysql_error());
$num = mysql_num_rows($result);
for($i=0;$i<$num;$i++){

nun würd ich gerne die ergebnisse nach dem Preis sortieren lassen.
Der Preis befindet sich in der Tabelle artikel_details (artikelid | preis)

leider weiß ich nicht wie ich in $result ein orderntliches Order einbaue

hat jemand eine idee
 
Zuletzt bearbeitet:
nun würd ich gerne die ergebnisse nach dem Preis sortieren lassen.
Der Preis befindet sich in der Tabelle artikel_details (artikelid | preis)
Sortieren mit ORDER BY artikel_details.preis.
Da die Tabelle noch nicht in der Abfrage ist, musst du diese genauso wieder dazuJOINen:
... INNER JOIN artikel_details USING(artikelid) ...
 
Sortieren mit ORDER BY artikel_details.preis.
Da die Tabelle noch nicht in der Abfrage ist, musst du diese genauso wieder dazuJOINen:
... INNER JOIN artikel_details USING(artikelid) ...

kann man im einem mysql_query() 2 mal inner join benutzen?
wo würde ich das einbauen, wo wie ich das mache erhallte ich immer Fehlermeldungen
 
kann man im einem mysql_query() 2 mal inner join benutzen?
Du kannst bis zu 10 (nicht hauen, wenn ich mich irr und es mehr sind :biggrin: zu Risiken und Nebenwirkungen eben :rtfm: ) Tabellen dazuJOINen.
wo würde ich das einbauen, wo wie ich das mache erhallte ich immer Fehlermeldungen
Alle JOINs hintereinander, also in der Art
Code:
[FONT=Courier New][B][COLOR=#9932cc]SELECT[/COLOR][/B] foo
[B][COLOR=#9932cc]FROM[/COLOR][/B] bar
[B][COLOR=#9932cc]INNER[/COLOR][/B] [B][COLOR=#9932cc]JOIN[/COLOR][/B] table1 [B][COLOR=#9932cc]ON[/COLOR][/B] table1.id = bar.test
[B][COLOR=#9932cc]INNER[/COLOR][/B] [B][COLOR=#9932cc]JOIN[/COLOR][/B] table2 [B][COLOR=#9932cc]USING[/COLOR][/B](field)
[B][COLOR=#9932cc]INNER[/COLOR][/B] [B][COLOR=#9932cc]JOIN[/COLOR][/B] table3 ....
[B][COLOR=#9932cc]WHERE[/COLOR][/B] blabla = 1
[B][COLOR=#9932cc]ORDER[/COLOR][/B] [B][COLOR=#9932cc]BY[/COLOR][/B] quark [B][COLOR=#9932cc]DESC[/COLOR][/B][/FONT]
Auch diese Reihenfolge findest du im Manual, wenn du unter der SELECT-Syntax nachsiehst.
 
PHP:
$result = mysql_query("SELECT a.artikelid, b.kategorie FROM artikel_motortypen a
INNER JOIN artikel_stammdaten b ON a.artikelid=b.id INNER JOIN artikel_details c USING(preis) WHERE a.typ='$typ' AND b.kategorie='$kat' order by c.preis ASC") or die(mysql_error());

PHP:
Unknown column 'db1019591-shop.b.preis' in 'on clause'

mhh. was mache ich verkehrt? (habs auch schon ohne c versucht, also mit artikel_details)
 
Ich kann mir nicht vorstellen, dass der Preis der Fremdschlüssel ist, deshalb wird wohl auch das Feld `preis` nicht in beiden Tabellen `artikel_details` und `artikel_motortypen` existieren. Viel eher vermute ich, dass auch `artikel_details` seine Datensätze über ein Feld `id`/`artikelid`/etc. identifiziert.
 
PHP:
$result = mysql_query("SELECT a.artikelid, b.kategorie FROM artikel_motortypen a
INNER JOIN artikel_stammdaten b ON a.artikelid=b.id INNER JOIN artikel_details c USING(artikelid) WHERE a.typ='$typ' AND b.kategorie='$kat' order by c.preis ASC") or die(mysql_error());

Unknown column 'db1019591-shop.b.artikelid' in 'on clause'