JOIN, zwei tabellen zusammen ausgeben |
schweppe
Mitglied
Dabei seit: 13.09.07
Beiträge: 39
Forenversion: 2.3
|
|
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
__________________
|
|
26.09.08 21:29 |
E-Mail
WWW
Finden
Als Freund hinzufügen
|
|
schweppe
Mitglied
Dabei seit: 13.09.07
Beiträge: 39
Forenversion: 2.3
Themenstarter
|
|
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
__________________
|
|
26.09.08 21:46 |
E-Mail
WWW
Finden
Als Freund hinzufügen
|
|
C-Board unregistriert
|
|
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
|
|
27.09.08 09:07 |
|
|
schweppe
Mitglied
Dabei seit: 13.09.07
Beiträge: 39
Forenversion: 2.3
Themenstarter
|
|
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
Dateianhang: |
liste.jpg (28 KB, 72 mal heruntergeladen)
|
__________________
|
|
27.09.08 11:04 |
E-Mail
WWW
Finden
Als Freund hinzufügen
|
|
Ghostmaster
Das Böse
Dabei seit: 17.01.04
Beiträge: 6.440
Fähigkeiten: WBB2 Profi Forenversion: 2.3
|
|
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.
|
|
27.09.08 12:11 |
Finden
Als Freund hinzufügen
|
|
schweppe
Mitglied
Dabei seit: 13.09.07
Beiträge: 39
Forenversion: 2.3
Themenstarter
|
|
ja, so ähnlich hatte ich das auch schon versucht. aber das klappt auch nicht
siehe anhang
Dateianhang: |
list2.jpg (40 KB, 63 mal heruntergeladen)
|
__________________
|
|
27.09.08 12:33 |
E-Mail
WWW
Finden
Als Freund hinzufügen
|
|
Ghostmaster
Das Böse
Dabei seit: 17.01.04
Beiträge: 6.440
Fähigkeiten: WBB2 Profi Forenversion: 2.3
|
|
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.
|
|
27.09.08 12:46 |
Finden
Als Freund hinzufügen
|
|
schweppe
Mitglied
Dabei seit: 13.09.07
Beiträge: 39
Forenversion: 2.3
Themenstarter
|
|
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
__________________
|
|
27.09.08 12:50 |
E-Mail
WWW
Finden
Als Freund hinzufügen
|
|
Ghostmaster
Das Böse
Dabei seit: 17.01.04
Beiträge: 6.440
Fähigkeiten: WBB2 Profi Forenversion: 2.3
|
|
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.
|
|
27.09.08 12:58 |
Finden
Als Freund hinzufügen
|
|
C-Board unregistriert
|
|
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
|
|
27.09.08 14:10 |
|
|
schweppe
Mitglied
Dabei seit: 13.09.07
Beiträge: 39
Forenversion: 2.3
Themenstarter
|
|
gibts eine möglichkeit das zu testen?
dann würd ich das direkt mal machen
__________________
|
|
27.09.08 18:00 |
E-Mail
WWW
Finden
Als Freund hinzufügen
|
|
|