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
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.
|
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
Die Variable für das Statement lautet
$rersult, in der Whileschleife suchst Du nach
$result.
Ein einziger Buchstabe (
r) macht alles kaputt
Gruß Mike
schweppe

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.
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
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
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.
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