Hallo,
ich habe folgende Tabellen:
marken, artikel, kategory und artikel2kategorie
ich versuch das mal darzustellen:
marke -> marken_id
artikel -> artikel_id, marken_id
kategory -> kategory_id
artikel2kategorie -> id, kategory_id, artikel_id
In der artikel2kategorie stehen nur die direkten Kategoriezuweisungen zu einem Artikel drin, also:
Hauptkategorie
Unterkat 1
Unterkat 2
Wenn ein Artikel in Unterkat 2 sein soll, dann wird er nur dort zugewiesen.
Ich möchte nun folgendes Wissen:
:: Alle Unterkategorien der Hauptkategorie x, welche Artikel mit der Marke Y enthalten
:: Alle Hauptkategorien die Unterkategorien enthalten, in denen Artikel mit der Marke Y vorkommen
:: Alle Marken, die innerhalb einer Unterkategorie der Hauptkategorie X vorkommen.
Hat jemand eine Ahnung wie ich das machen kann, rein über SQL?
lgralf
Ankündigung
Einklappen
Keine Ankündigung bisher.
SQL Struktur
Einklappen
Neue Werbung 2019
Einklappen
X
-
Es ist ja schön, dass Du Dich beteiligst, Splasch, aber immer öfter fällt mir auf, dass Du wohl die Beiträge nicht liest oder Aussagen wiederholst. Wozu?
-
@kerstel
Zu nächst solltes du mal erwähnen nach welchen System dein Baum arbeitet.
Nested Sets oder Nachbarschaft Matrix auch genannt (Adjazenzmatrix)
http://de.wikipedia.org/wiki/Repr%C3...en_im_Computer
Beim der Nachbarschaft Matrix wirst du eine Rekusive Funktion benötigen die alle Teile auslesen kann. Um eben auf deine gewünschten Ergbnisse zu kommen.
Mfg Splasch
Einen Kommentar schreiben:
-
Ein Gast antworteteEgal, was das System treibt: Du zäumst das Pferd vom Schwanz auf.Zitat von kerstel Beitrag anzeigenwichtig wäre dass ich erstmal die richtigen ergebnisse bekomme, den baum baut das system nachher von alleine
Einen Kommentar schreiben:
-
wichtig wäre dass ich erstmal die richtigen ergebnisse bekomme, den baum baut das system nachher von alleine
Einen Kommentar schreiben:
-
Ein Gast antworteteDann hast Du ein Design Problem, weil die gewünschte Funktionalität vorher (von wem auch immer) nicht berücksichtigt wurde. Was Du versuchst, bezeichne ich gern als "aufbohren".Zitat von kerstel Beitrag anzeigenJa, bringt mit aber nichts wenn die DB nicht von mir kommt
Für nested sets benötigst Du neben id zusätzlich nur noch lft und rgt, welche korrekt gesetzt sein müssen.
Einen Kommentar schreiben:
-
Ja, bringt mit aber nichts wenn die DB nicht von mir kommtZitat von meikel Beitrag anzeigenDa wir gerade von Bäumen sprechen:
Schon mal über nested sets nachgedacht?
Einen Kommentar schreiben:
-
Ein Gast antworteteDa wir gerade von Bäumen sprechen:
Schon mal über nested sets nachgedacht?Zitat von kerstel Beitrag anzeigenIch möchte hier aber den kompletten Baum haben.
http://de.wikipedia.org/wiki/Nested_Sets
http://www.klempert.de/nested_sets/
http://phpperformance.de/nested-sets...eume-in-mysql/
http://reeg.junetz.de/DSP/node11.htm...00000000000000
http://www.traum-projekt.com/forum/7...tml#post440236
Einen Kommentar schreiben:
-
Hi,
Punkt 3 habe ich inzwischen selber hinbekommen:
Bei Punkt 1 happert es noch, ich habe folgenden Ansatz:Code:SELECT DISTINCT man.* FROM marke AS man JOIN artikel AS art ON art.marken_id = man.marken_id AND art.active = '1' JOIN kategory AS cat ON cat.parentid = '".$sCategoryID."' AND cat.active = '1' JOIN artikel2kategorie AS a2c ON a2c.kategory_id = cat.kategory_id AND a2c.artikel_id = art.artikel_id WHERE man.active = '1'
Allerdings bekomme ich dann nur die Unterkategorien, da diese ja auch die Artikel zugewiesen bekommen haben. Nicht aber die Hauptkategorien, denen ja keine Artikel zugewiesen wurden. Ich möchte hier aber den kompletten Baum haben.Code:SELECT DISTINCT cat.* FROM kategory AS cat JOIN artikel AS art ON art.active = '1' AND art.marken_id = '".$sBrandID."' JOIN artikel2kategorie AS a2c ON a2c.kategory_id = cat.kategory_id AND a2c.artikel_id = art.artikel_id WHERE cat.active = '1' ORDER BY oxparentid, oxsort, oxtitle
Die Kategorie Tabelle baut sich so auf:
kategory_id, parent_id, title, ....
1, rootid, Hauptkategorie
2, 1, Unterkategorie 1
3, 1, Unterkategorie 2
4, rootid, Hauptkategoire 2
lgralf
Einen Kommentar schreiben:
-
hm, was kann ich tun damit es klarer wird? Welche Info fehlt Dir?
Nutze mysql5
Einen Kommentar schreiben:
-
Nicht wirklich, aber egal. Wie man (mit PostgreSQL) rekursive Abfragen macht, habe ich hier im Forum erst vor wenigen Tagen gezeigt. Ich weiß nicht, ob Du überhaupt PostgreSQL nutzt.Zitat von kerstel Beitrag anzeigenHallo Andreas,
Ist das klarer?
lgralf
http://www.php.de/datenbanken/87699-...-struktur.html
Andreas
Einen Kommentar schreiben:
-
Hallo Andreas,
gerne. Versucht habe ich das über PHP, in dem ich mir einfach die Daten aus der DB hole und das ergebnis dann mit foreach durchlaufe um auf die nächsten Werte zu kommen, das ist aber sehr unperformant, deshalb suche ich eine Lösung rein in SQL. Hier habe ich es mit JOINS versucht, bin aber zu keinem Ergebnis gekommen.
z.B. habe ich für den ersten Fall (Alle Unterkategorien der Hauptkategorie x, welche Artikel mit der Marke Y enthalten) versucht:
SELECT *
FROM kategory AS c
JOIN artikel AS a
LEFT JOIN artikel2kategorie AS a2c ON a2c. kategory_id = c.kategory_id
WHERE c.parent_id = '943a9ba3050e78b443c16e043ae60ef3'
AND a.marken_id = 'tg3e7db7c3d2ca69ff3074cfe3e7dfd0'
Ich bekomme hier, die gleichen Kategorien mehrmals ausgegeben.
Das mit den Tabellen habe ich versucht einfach darzustellen, ich versuche es nochmal anders (nur mit den benötigten Feldern):
Tabelle marke:
marken_id (ID der Marke), name
Tabelle artikel
artikel_id (ID des Artikels), marken_id (ID der Marke), name
Tabelle kategory
kategory_id (ID der Kategorie), parent_id (ID der übergeordneten Kategorie)
Tabelle artikel2kategorie (für n:m Beziehungen zwischen Artikel und Kategorie weil ein Artikel mehreren Kategorien zugeordnet sein kann und eine Kategorie mehrere Artikel enthalten kann)
id, kategory_id (ID der Kategorie), artikel_id (ID des zugewiesenen Artikels)
Ist das klarer?
lgralf
Einen Kommentar schreiben:
-
Es wäre vielleicht hilfreich, wenn Du mal ganz einfach Beispieltabellen- und daten lieferst, dazu was rauskommen soll, und was Du bereits versucht hast.Zitat von kerstel Beitrag anzeigenHallo,
ich habe folgende Tabellen:
marken, artikel, kategory und artikel2kategorie
ich versuch das mal darzustellen:
Andreas
Einen Kommentar schreiben:
-
Hallo kerstel,
wir freuen uns, dass du an der öffentlichen Diskussion hier auf PHP.de teilnimmst. Als Community stehen wir dir gerne helfend zur Seite.
Jedoch versteht sich PHP.de als Forum für Hilfe zur Selbsthilfe, weshalb wir gewisse Mindestansprüche an die Qualität von Benutzerbeiträgen stellen.
Diese schließen ein:
- eine verständliche Fragestellung
- das Bemühen um eine korrekte Rechtschreibung und Grammatik
- eine sinnvolle Beitragsformatierung (z.B. Code-Schnipsel in [PHP]-, [HTML]- oder [CODE]-Tags)
- halbwegs solides Grundlagenwissen in den entsprechenden Bereichen
- ausführliche, aber nicht ausschweifende Problembeschreibungen
- relevante Code-Auszüge wo notwendig
- und ganz wichtig: Eigeninitiative und Aufgeschlossenheit seitens das Fragestellers (das bist du)
Dies ist keine Beitragsschließung!
Du kannst deinen Thread auf der Grünen Wiese gerne weiterführen. Wenn dein Beitrag hier gelandet ist, so ist dies auch kein Beinbruch. Du darfst nur nicht allzu große Hilfe von den erfahrenen Benutzern dieses Forums erwarten und solltest dir einmal Zeit nehmen, unsere Forenrichtlinien genau zu lesen. Auch unsere mühsam erstellte Sammlung von Einsteiger-Ressourcen ist einen gründlichen Blick wert. In aller Regel lässt sich dein Problem nämlich bereits mit dem dort vermittelten Wissen lösen. Eine ausführliche Google-Suche nach deinem Problem schadet selbstverständlich auch nie.
Und schlussendlich: wenn du dir all dies zu Herzen genommen und verstanden hast, warum dein Beitrag auf der Wiese gelandet ist, klappt es vielleicht beim nächsten Mal.
Mit besten Grüßen
Manko10, Forenmoderation
Einen Kommentar schreiben:

Einen Kommentar schreiben: