CronJob-Service
bei SELFPHP mit ...
|
+ minütlichen Aufrufen
+ eigenem Crontab Eintrag
+ unbegrenzten CronJobs
+ Statistiken
+ Beispielaufrufen
+ Control-Bereich
Führen Sie mit den CronJobs von
SELFPHP zeitgesteuert Programme
auf Ihrem Server
aus. Weitere Infos
|
:: Anbieterverzeichnis ::
Globale Branchen
Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP
:: Newsletter ::
Abonnieren Sie hier den kostenlosen
SELFPHP Newsletter!
|
MySQLi/PDO/(MySQL) Anfänger, Fortgeschrittene oder Experten können hier Fragen und Probleme rund um MySQLi/PDO/(MySQL) diskutieren |
22.02.2013, 09:52:36
|
Anfänger
|
|
Registriert seit: Feb 2013
Alter: 49
Beiträge: 7
|
|
select abfrage Kategoriebaum
Hallo Community,
ich habe folgendes Problem:
Ich benötige einen kategoriebaum aus einer DB Abfrage, meine Tabellen sehen folgendermassen aus:
Code:
categories
----------------------
| cat_id | parent_id |
----------------------
| 1 | 0 |
| 2 | 0 |
| 3 | 1 |
| 4 | 1 |
| 5 | 2 |
| 6 | 5 |
----------------------
categories_description
-------------------------------
| cat_id | cat_name |
-------------------------------
| 1 | Kat 1 |
| 2 | Kat 2 |
| 3 | Unter_Kat 1a |
| 4 | Unter_Kat 1b |
| 5 | Unter_Kat 2a |
| 6 | Unter_unter_Kat 2a |
-------------------------------
Wenn ich nun folgende abfrage sende
PHP-Code:
SELECT c.cat_id,
cd.cat_name,
c.parent_id
FROM " . TABLE_CATEGORIES . " AS c,
" . TABLE_CATEGORIES_DESCRIPTION . " AS cd
WHERE c.categories_id = cd.categories_id
ORDER BY " . $catsort
erhalte ich folgende ausgabe der Kategorien
Code:
Kat 1
Kat 2
Unter_Kat 1a
Unter_Kat 1b
Unter_Kat 2a
Unter_unter_Kat 2a
die ausgabe soll aber folgendermassen aussehen:
Code:
Kat 1
--Unter_Kat 1a
--Unter_Kat 1b
Kat 2
--Unter_Kat 2a
----Unter_unter_Kat 2a
Ist es möglich die Kategorienamen in der Reihenfolge ihrer hierarischen Struktur auszugeben, wenn ja wie ??
Würde mich über jeden Tipp oder Hilfestellung freuen !
Gruß eleven
|
22.02.2013, 13:27:40
|
|
SELFPHP Guru
|
|
Registriert seit: Dec 2003
Ort: Erfurt
Alter: 75
Beiträge: 4.001
|
|
AW: select abfrage Kategoriebaum
|
26.02.2013, 13:22:36
|
Anfänger
|
|
Registriert seit: Feb 2013
Alter: 43
Beiträge: 7
|
|
AW: select abfrage Kategoriebaum
Ich würde die Unterkategorien in eine extra Tabelle schreiben und stets die Unterkategorien den Oberkategorien zuordnen, denn das Verhältnis ist 1:n. Dann werden die Tabellen verknüpft und die Oberkategorie zuerst sortiert und dann die Unterkategorien usw. Es muss ja beschrieben werden, das cat_id 3 Untermenge von cat_id 1 ist. Das kann auch in einer zusätzlichen Tabelle definiert werden.
Gruß
Geändert von Sjard (26.02.2013 um 13:35:55 Uhr)
|
26.02.2013, 13:53:41
|
|
SELFPHP Guru
|
|
Registriert seit: Dec 2003
Ort: Erfurt
Alter: 75
Beiträge: 4.001
|
|
AW: select abfrage Kategoriebaum
Zitat:
Zitat von Sjard
Es muss ja beschrieben werden, das cat_id 3 Untermenge von cat_id 1 ist.
|
Das ist mit nested sets kein Problem:
Zitat:
Zitat von http://de.wikipedia.org/wiki/Nested_Sets
Der Begriff Nested Sets (verschachtelte Mengen) bezeichnet ein Modell zur Abbildung eines Baumes mit Hilfe von Mengen, die ineinander verschachtelt sind. Dabei wird die "ist-Kind-von"-Beziehung auf eine "ist-Teilmenge-von"-Beziehung abgebildet. Das Modell wurde ursprünglich im Buch SQL for Smarties von Joe Celko vorgestellt. Es wird hauptsächlich im Rahmen von Datenbankanwendungen eingesetzt. Diese Technik ist auch unter dem Namen Modified Preorder Tree Traversal (MPTT) bekannt.
Mit Hilfe von Nested Sets erkauft man sich die Möglichkeit, Teilbäume oder den Pfad zur Wurzel mit konstantem Aufwand auslesen zu können zum Preis, beim Ändern des Baumes mit komplexeren Operationen arbeiten zu müssen.
|
|
26.02.2013, 14:34:16
|
Anfänger
|
|
Registriert seit: Feb 2013
Alter: 43
Beiträge: 7
|
|
AW: select abfrage Kategoriebaum
Das auf jeden Fall, aber die Frage muss auch gestellt werden, ob dauernd neue Kategorien und Unterkategorien erstellt werden und jeden Tag Änderungen und Modifikationen an den Knoten und Kindelementen von Nöten sind?
|
26.02.2013, 15:36:57
|
Anfänger
|
|
Registriert seit: Feb 2013
Alter: 49
Beiträge: 7
|
|
AW: select abfrage Kategoriebaum
Danke schpn mal für die vielen Tipps!
Zitat:
Zitat von Sjard
Das auf jeden Fall, aber die Frage muss auch gestellt werden, ob dauernd neue Kategorien und Unterkategorien erstellt werden und jeden Tag Änderungen und Modifikationen an den Knoten und Kindelementen von Nöten sind?
|
Ja es werden ständig neue Kategorien angelegt ! Leider
Die Probelmatik ist auch noch folgende das ich eigentlich an der DB Struktur nicht ändern sollte sprich tabellen hinzufügen, und somit fällt ja schon mal ein Nested Set aus.
Ein freundlicher User hat mir dann folgende Abfrage zugesandt:
Code:
SELECT t1.cat_name AS category,
t3.cat_name AS subcategory
FROM categories_description AS t1
LEFT JOIN categories AS t2
ON t2.parent_id = t1.cat_id
LEFT JOIN categories_description AS t3
ON t3.cat_id = t2.cat_id
WHERE t3.cat_id IS NOT NULL
ORDER BY t1.cat_id, t3.cat_id
;
diese hat mich aber auch nicht weiter gebracht, da zuviele Kategorien angezeigt werden und vorallem werden nur die Unterkategorienamen ausgegeben.
Grüße eleven
Geändert von eleven (26.02.2013 um 15:50:58 Uhr)
|
26.02.2013, 16:40:14
|
Anfänger
|
|
Registriert seit: Feb 2013
Alter: 49
Beiträge: 7
|
|
AW: select abfrage Kategoriebaum
So es geht weiter :
Code:
SELECT p.cat_id,
p.parent_id,
p.cat_id AS sequence
FROM categories AS p
WHERE p.parent_id = 0
UNION
SELECT t.cat_id,
t.parent_id,
t.parent_id AS sequence
FROM categories AS t
WHERE t.parent_id <> 0
ORDER BY sequence, parent_id
folgende Abfrage bringt mir schonmal die richtige Reihenfolge !
Wenn ich jetzt noch an die
cat_name aus der categorie_description rankomme dann wäre ich glaube ich schon mal Glücklich !!
grüße eleven
|
26.02.2013, 17:44:54
|
|
SELFPHP Guru
|
|
Registriert seit: Dec 2003
Ort: Erfurt
Alter: 75
Beiträge: 4.001
|
|
AW: select abfrage Kategoriebaum
Kann hier keiner mehr lesen?
http://www.klempert.de/nested_sets/
oder
http://pear.php.net/search.php?q=nes...ckages&x=0&y=0
Das Thema ist geklärt - es gibt SQL Beispiele und auch ne PEAR Klasse.
Zitat:
Die Probelmatik ist auch noch folgende das ich eigentlich an der DB Struktur nicht ändern sollte sprich tabellen hinzufügen, und somit fällt ja schon mal ein Nested Set aus.
|
Da haste eben Pech.
"Warum einfach, wenns auch umständlich geht."
"Nichts ist haltbarer als ein Provisorium."
|
27.02.2013, 09:27:06
|
Anfänger
|
|
Registriert seit: Feb 2013
Alter: 49
Beiträge: 7
|
|
AW: select abfrage Kategoriebaum
Zitat:
Zitat von meikel
|
Natürlich kann ich lesen!
Die Problematik ist eben die das sich die Kategoriestruktur jederzeit ändern kann, und laut verschiedener Quellen sollte man dann ein Nested Set nicht einsetzen. Desweiteren soll an der Struktur nichts verändert werden das die Sache Updatefähig bleiben soll ohne DB Änderungen durchzuführen.
Ich habe ja schon in meinem letzten Post den weg gefunden Die Struktur darzustellen es fehlt mir eben nur noch der letzte kick um für jeden Naviagtionspunkt den Namen aus der 2ten Tabellen auszulesen.
Liebe grüße eleven
|
27.02.2013, 10:14:50
|
|
SELFPHP Guru
|
|
Registriert seit: Dec 2003
Ort: Erfurt
Alter: 75
Beiträge: 4.001
|
|
AW: select abfrage Kategoriebaum
Zitat:
Zitat von eleven
Natürlich kann ich lesen!
Die Problematik ist eben die das sich die Kategoriestruktur jederzeit ändern kann, und laut verschiedener Quellen sollte man dann ein Nested Set nicht einsetzen.
|
Das Problem an solchen Projekten ist, daß sie nix taugen. Nested sets ist die Methode, Bäume in eine Datenbank zu packen. Alles andere ist popeliger Kinderkram.
Zitat:
Ich habe ja schon in meinem letzten Post den weg gefunden Die Struktur darzustellen es fehlt mir eben nur noch der letzte kick um für jeden Naviagtionspunkt den Namen aus der 2ten Tabellen auszulesen.
|
Ich sags Dir noch mal: mit nested sets isses kein Thema, sich von einem Ast zum anderen zu hangeln oder Teilbäume darzustellen. Die Vernetzung erledigen lgt und rgt.
Wir könnten uns bestenfalls darüber streiten, wie man die Abfrage fixer gestaltet, wenn es ein fetter Baum mit 100.000 Ästen ist und Du einen Teilast absägen möchtest.
Stattdessen möchtest Du ein sinnfreies Projekt aufbohren. Die Quellen, die Dir erzählen, man solle wegen einer möglichen Änderung der Kategoriestruktur auf nested set verzichten, gehören wegen erwiesener Blödheit in den SPAM Filter.
Kategorien und Unterkategorien sind in nested sets die Astgabeln. Und Wenn die Unterkategorie noch ne Unterunterkategorie haben möchte, gibts eben einen Ast mehr. Die Bocksprünge, die Du dann anstellen müßtest, möchte ich mir da gar nicht mehr vorstellen wollen.
btw: mit welchem Monster schlägst Du Dich da eigentlich rum? Hoffentlich kriegste dafür genug Schmerzensgeld...
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
Forumregeln
|
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
Alle Zeitangaben in WEZ +2. Es ist jetzt 20:36:05 Uhr.
|