JOIN, zwei tabellen zusammen ausgeben

schweppe
Hi

ich hab mal wieder ein problem und zwar geht es ums JOIN.

Habe mich jetzt schon durch diverse seiten gelesen aber ich krieg es einfach nicht umgesetzt.

mein momentaner code

php:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
<?php

$filename="kategorie.php";

require("global.php");
require("acp/lib/class_parse.php");


$rersult=$db->unbuffered_query("SELECT abb_kategorie.KID, abb_kategorie.kname, abb_artikel.KID, abb_artikel.posttopic, abb_artikel.AID FROM abb_kategorie LEFT JOIN abb_artikel ON abb_kategorie.KID=abb_artikel.KID");
while ($row $db->fetch_array($result)){
    
    
    $kname=$row['kname'];
    $topic=$row['posttopic'];
    $AID=$row['AID'];
    
eval("\$list .= \"".$tpl->get("artikel_kategorie_list")."\";");
}

eval("\$tpl->output(\"".$tpl->get("artikel_kategorie")."\");");



?>


ich habe zwei tabellen.

einmal abb_artikel

in der artikel abgelegt sind mit den spalten

posttopic(artiekltitel),AID(artikelid),KID(kategorieid)

und einmal die tabelle abb_kategorie
in der die KID(kategorieid) und kname(kategoriename) abgelegt sind

so nun möchte ich posttopic und AID mit der KID=X aus der tabelle abb_artikel
dem kname mit der KID=X zuordnen

und anzeigen lassen.

aber bei dem obrigen code zeigt er mir gar nichts an.

ich weiß nicht wo der fehler liegt, ich vermute mal grob es liegt an der while-schleife. aber das ist nur eine vermutung.

vielleicht ist es auch die abfrage selber, ich hab noch nie mit JOIN gearbeitet und verzweifel auch gerade echt daran unglücklich

also wäre nett wenn mir jemand auf die sprünge hilft

danke schon mal

mfg schweppe
[kamui]
Ich selbst habe auch noch nicht mit JOIN gearbeitet, aber Google liefert folgendes Tutorial an erster Stelle: http://www.tizag.com/mysqlTutorial/mysqljoins.php

Zitat:
so nun möchte ich posttopic und AID mit der KID=X aus der tabelle abb_artikel
dem kname mit der KID=X zuordnen


Bahnhof? Abfahrt?
schweppe
Zitat:
Original von schweppe

Habe mich jetzt schon durch diverse seiten gelesen aber ich krieg es einfach nicht umgesetzt.



Augen rollen


und was verstehst du an deinem zitat nicht?

alle artikel mit der KID 1 sollen der kategorie (kname) mit der KID 1 zugeordnet werden
alle artikel mit der KID 2 sollen der kategorie mit der KID 2 zugeordnet werden

und so weiter
C-Board
Zitat:
Original von schweppe
aber bei dem obrigen code zeigt er mir gar nichts an.

ich weiß nicht wo der fehler liegt, ich vermute mal grob es liegt an der while-schleife. aber das ist nur eine vermutung.


Manchmal liegt der Fehler soooo nah und man sieht ihn einfach nicht verwirrt

Die Variable für das Statement lautet $rersult, in der Whileschleife suchst Du nach $result.

Ein einziger Buchstabe (r) macht alles kaputt fröhlich

Gruß Mike
schweppe
auweia so was dummes. naja danke c-board.
jetzt gibt er mir auch was aus, allerdings nicht ganz so wie gewünscht,

anstatt das er alle artikel mit der KID=1 der kategorie (KID=1) zuordnet gibt er mir für jeden artikel erneut die kategorie aus (siehe anhang)

erscheint aber auch logisch, sagt ihm ja keiner das kname nur jeweils einmal ausgegeben werden soll...

hat jemand eine lösung für dieses problem?

mfg schweppe
Ghostmaster
Versuch mal das hier (wenn ich das richtig verstanden habe)

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
$result_kategorie = $db->query("SELECT kategorieid,kname FROM abb_kategorie ORDER BY kname ASC");
while ($row_kategorie = $db->fetch_array($result_kategorie)) {

	$result_artikel = $db->query("SELECT posttopic FROM abb_artikel WHERE kategorieid = '$row_kategorie[kategorieid]'");
	while ($row_artikel = $db->fetch_array($result_artikel)) {
		eval("\$list_artikel .= \"".$tpl->get("artikel_artikel_list")."\";");
	}
	eval("\$list .= \"".$tpl->get("artikel_kategorie_list")."\";");
}


Wenn du Fragen zum Code hast, stell sie ruhig. Augenzwinkern
Du musst noch ein Template mut dem Namen "artikel_artikel_list" anlegen.
schweppe
ja, so ähnlich hatte ich das auch schon versucht. aber das klappt auch nicht
siehe anhang
Ghostmaster
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
$result_kategorie = $db->query("SELECT kategorieid,kname FROM abb_kategorie ORDER BY kname ASC");
while ($row_kategorie = $db->fetch_array($result_kategorie)) {

	$result_artikel = $db->query("SELECT posttopic FROM abb_artikel WHERE kategorieid = '$row_kategorie[kategorieid]'");
	while ($row_artikel = $db->fetch_array($result_artikel)) {
		eval("\$list_artikel .= \"".$tpl->get("artikel_artikel_list")."\";");
	}
	eval("\$list .= \"".$tpl->get("artikel_kategorie_list")."\";");
	$ilst_artikel = '';
}


Hab es nicht ausprobiert, aber versuch das hier.
schweppe
bingo das hat geklappt smile

vielen dank

könntest du mir noch erklären was dieser befehl auslöst?
also das resultart seh ich ja, aber was sagt er genau?


mfg schweppe

ps: muss natürlich $list_artikel heißen, da haste dich vertippt Augenzwinkern
Ghostmaster
Du liest zuerst alle Kategorien aus. Das ist eine die 1. While Schleife.
Und in der 1. While schleife wird eine 2. Abfrage gestartet die sich die Artikeleinträge dieser Kategorie heraussucht. Dann kommt mittels der 2. While Schleife die Ausgabe der Artikel. smile
C-Board
Würde das nicht mit GROUP BY den gleichen (aber schnelleren) Effekt haben?

php:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
<?php

$filename="kategorie.php";

require("global.php");
require("acp/lib/class_parse.php");

$result $db->unbuffered_query("SELECT 
    abb_kategorie.KID, 
    abb_kategorie.kname, 
    abb_artikel.KID, 
    abb_artikel.posttopic, 
    abb_artikel.AID 
    FROM abb_kategorie 
    LEFT JOIN abb_artikel ON abb_kategorie.KID=abb_artikel.KID 
    GROUP BY abb_kategorie.KID
");
while ($row $db->fetch_array($result)){
    $kname=$row['kname'];
    $topic=$row['posttopic'];
    $AID=$row['AID'];
    eval("\$list .= \"".$tpl->get("artikel_kategorie_list")."\";");
}
eval("\$tpl->output(\"".$tpl->get("artikel_kategorie")."\");");
?>


Gruß Mike
schweppe
gibts eine möglichkeit das zu testen?

dann würd ich das direkt mal machen Augenzwinkern