ERLEDIGT
NEIN
NEIN
ANTWORTEN
13
13
ZUGRIFFE
953
953
EMPFEHLEN
-
Hallo Leute,
ich versuche die ganze Zeit schon eine Abfrage über drei Tabellen. Habe es auch schon mit LEFT JOIN....ON probiert ohne Erfolg.
Hier mal meine Tabellen.
News:
id | title
-------------------------------
1 | News 1
2 | News 2
Kategorie:
id | catName | parentID
----------------------------------
1 | Hauptcat | NULL
2 | Untercat | 1
Kategorie MM:
NewsID | CatID
-------------------------------------
1 | 2
Ich habe nun die ID der News1, die ist in einer Kategorie Untercat. Untercat gehört zur Hauptkategorie (ist child von). Wie bekomme ich nun den ID der Hauptkategorie raus?
Das muss doch irgendwie gehen? Am besten noch in einem Ruck.
Bin über jeden Gedankenanstoss froh.
Viele Grüße
-
Also, ich verscuh zu verstehen wie die Zusammenhänge sind.
die News haben eine ID
MM verbindet die News mit einer Unterkategorie
In Kategorie 2 willst du die parentID auslesen.
Code sql:1 2 3 4 5 6 7 8 9
SELECT N.*, K.parentID FROM ´Kategorie MM´ AS NK LEFT JOIN News AS N ON NK.NewsID = N.id LEFT JOIN Kategorie AS K ON NK.CatID = K.id
---------------------------------------------------------------------------------------------------
item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
item: Tutorial: [PHP][MySQL] Debug Queries
item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben
-
15.04.10 09:19 #3
- Registriert seit
- Jul 2006
- Beiträge
- 518
HEy,
wenn eine News nur zur einer Kategorie gehört,
dann kannst du die "Kategorie MM:" löschen und ein weiteres Attribut in der "
News:" benutzen.
Um die Hauptkategorie zu erhalten, musst du dies rekursiv in PHP o.ä. machen.
Rekursion gibt es in MySQL meines Wissens nach nicht.
mfg
bo
-
Muss ich dich enttäuschen. So ganz stimmt das nicht.
Wenn die Stufenanzahl bekannt ist, ist es kein Problem mit SQL
Bsp. für 2 Stufig (also Haubtkategoeri und unterkategorie)
Code sql:1 2 3 4 5
SELECT i.id AS subID, h.* FROM Kategorie AS u INNER JOIN Kategorie AS h ON u.parentID = h.id
---------------------------------------------------------------------------------------------------
item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
item: Tutorial: [PHP][MySQL] Debug Queries
item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben
-
Hallo,
@yaslaw: Es bestehen nur 2 Stufen, nun muss ich nur noch die WHERE Clause einbauen. Er soll mir nur die anzeigen die mit der NewsID 1 in Verbindung steht.
Vielen Dank
-
15.04.10 10:50 #6
- Registriert seit
- Jul 2006
- Beiträge
- 518
-
Hey,
wieso
Code :1
n.id = 1
n.id habe ich doch gar nicht. Ich habe folgenden den Code genommen:
Code :1 2 3 4 5
SELECT i.id AS subID, h.* FROM Kategorie AS u INNER JOIN Kategorie AS h ON u.parentID = h.id
Da sollte doch jetzt am Ende WHERE news.id = 1 oder? Das läuft aber nicht, er zeigt mir alle Hauptkategorien mehrmals an
-
15.04.10 11:19 #8
- Registriert seit
- Jul 2006
- Beiträge
- 518
Aso,
entschuldige
.
Ich habe den oberen Code von yaslaw genommen,
da du dort ja n (Alias von News) hast.
Dann setz noch ein JOIN mit News rein, dann hast du ja die News.id
mfg
bo
-
Und wenn schon.... ist ja einfach mit MySQL über beliebig viele Stufen die Kategorien auszulesen
Ich hab mal schnell eine Tabelle erstellt
id,parentId
1,
2,1
3,2
4,1
5,4
6,5
7,6
8,2
9,10
10,8
Mit dem folgenden SQL lese ich den ganezn Baum über alle Stufen für die id 9 aus
Code sql:1 2 3 4 5 6 7 8
SELECT @id AS id, @id := (SELECT parentID FROM nav WHERE id = @id) AS parentID FROM nav, (SELECT @id := 9) AS vars WHERE @id IS NOT NULL
Das Resultat sieht dann so aus
id,parentID
9,10
10,8
8,2
2,1
1, NULL
Der Baum in der richtigen Reihenfolge, alles Rückverfolgbar etc. Was wünscht man sich mehr....
PS:
Bei grösseren Tabellen ev die Zeile
@id := (SELECT parentID FROM nav WHERE id = @id) AS parentID
durch
@id := IF(@id IS NOT NULL, (SELECT parentID FROM nav WHERE id = @id), NULL) AS parentID
ersetzen, damit er nach gefundener Haubt-ID nicht mehr weiter einen Lookup auf die Tabelle machtGeändert von Yaslaw (15.04.10 um 11:37 Uhr)
---------------------------------------------------------------------------------------------------
item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
item: Tutorial: [PHP][MySQL] Debug Queries
item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben
-
15.04.10 12:18 #10
- Registriert seit
- Jul 2006
- Beiträge
- 518
Hey,
igendwie habe ich noch Fragezeichen bei mir
Es sieht gerade für mich so aus,
als ob dein Beispiel nicht rekursiv ist.
Die Hauptkategorie von der ID 10 ist letztendlich 1
10->8->2->1PHP-Code:id,parentId
1,
2,1
3,2
4,1
5,4
6,5
7,6
8,2
9,10
10,8
Deine Beispiele müssten alle auf "Hauptkategorie mit der ID1" hinauslaufen.
Und so wie ich es verstanden habe, gibt es bei "CikoNo1" mehrere Hauptkategorien
Also mehrere Kategorien mit 'parentId' = NULL
Bei ihm müssten einzelne Kategorien verschiedenen Hauptkategorien haben.
mfg
boGeändert von bergonline (15.04.10 um 12:20 Uhr)
-
Macht nix. Dann häng weitere Haubtkategorien an. Das Resultat bleibt dasselbe.
Das ganze wird von der gewählten Unterkategorie aus und baut sich nach oben auf, nicht von der Haubtkategorie nach unten.
Es ist nicht direkt rekursiv. Es ist eine Schleife mit einem Lookup---------------------------------------------------------------------------------------------------
item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
item: Tutorial: [PHP][MySQL] Debug Queries
item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben
-
Danke euch beiden, hab jetzt mein Problem folgendermaßen gelöst:
Code :1 2
SELECT news.title, parCat.title, cat.title, cat.parent_category FROM Kategorie_MM AS newsCat LEFT JOIN news ON newsCat.newsid = news.id LEFT JOIN Kategorie AS cat ON newsCat.catID = cat.id LEFT JOIN Kategorie AS parentNewsCat ON parentNewsCat.parentID = newsCat.catID LEFT JOIN Kategorie AS parCat ON cat.parentID = parCat.id WHERE news.id = 1
Trotzdem Danke für eure Hilfe
-
@CikoNo1
Ich empfehle dir die SQLs über mehrere Zeilen zu formatieren. Es wird um einiges lesbarer
@bergonline
Wenn du natürlich eine vollständige Liste haben willst, wirds nur ein wenig komplexer
Code sql:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
SELECT id, GROUP_CONCAT(iid ORDER BY rownum DESC SEPARATOR '->') AS path FROM ( SELECT @rownum := @rownum+1 AS rownum, mylist.id AS id, IF(@lastl <> mylist.id, @id := mylist.id, @id) AS setVarId, @id AS iid, @lastl := mylist.id AS setVarLast, @id := (SELECT parentID FROM nav WHERE id = @id) AS parentID FROM (SELECT @id := 0, @lastl := 0, @rownum := 0) AS vars, (SELECT id FROM nav) AS myloop, (SELECT id FROM nav) AS mylist ) AS t WHERE iid IS NOT NULL GROUP BY id
Ergibt
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14
id,path 1,1 2,1->2 3,1->2->3 4,1->4 5,1->4->5 6,1->4->5->6 7,1->4->5->6->7 8,1->2->8 9,1->2->8->10->9 10,1->2->8->10 11,11 12,11->12 13,11->13
---------------------------------------------------------------------------------------------------
item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
item: Tutorial: [PHP][MySQL] Debug Queries
item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben
-
15.04.10 16:54 #14
- Registriert seit
- Jul 2006
- Beiträge
- 518
Hey,
das ist jetzt cool
Jetzt seh´ ichs
Muss mich unbedingt da mal weiter reinarbeiten.
Mit den "@" und :- habe ich bisher keine/wenig Übung.
Danke
mfg
bo
Ähnliche Themen
-
MySQL: select über mehrere Tabellen
Von dhh im Forum Relationale DatenbanksystemeAntworten: 3Letzter Beitrag: 30.04.08, 10:27 -
[MySQL] Hilfe bei SELECT Query über drei Tabellen
Von -ben- im Forum Relationale DatenbanksystemeAntworten: 9Letzter Beitrag: 29.09.05, 20:50 -
mysql: Select über zwei Tabellen
Von coyu im Forum Relationale DatenbanksystemeAntworten: 13Letzter Beitrag: 28.02.05, 10:37 -
[MySQL] SELECT über 2 Tabellen mit mehreren Daten in der zweiten
Von Aranita im Forum Relationale DatenbanksystemeAntworten: 3Letzter Beitrag: 13.02.05, 11:01 -
Select über mehrere Tabellen per MySQL
Von lago im Forum Relationale DatenbanksystemeAntworten: 1Letzter Beitrag: 30.06.04, 10:37





Zitieren


Login





