SELFPHP: Version 5.8.2 Befehlsreferenz - Tutorial – Kochbuch – Forum für PHP Einsteiger und professionelle Entwickler

SELFPHP


Professional CronJob-Service

Suche



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



:: Buchempfehlung ::

Websites optimieren für Google & Co.

Websites optimieren für Google & Co. zur Buchempfehlung
 

:: Anbieterverzeichnis ::

Globale Branchen

Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP  

 

:: Newsletter ::

Abonnieren Sie hier den kostenlosen SELFPHP Newsletter!

Vorname: 
Name:
E-Mail:
 
 

Zurück   PHP Forum > SELFPHP > MySQLi/PDO/(MySQL)

MySQLi/PDO/(MySQL) Anfänger, Fortgeschrittene oder Experten können hier Fragen und Probleme rund um MySQLi/PDO/(MySQL) diskutieren

Antwort
 
Themen-Optionen Ansicht
  #1  
Alt 22.02.2013, 09:52:36
eleven eleven ist offline
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
Mit Zitat antworten
  #2  
Alt 22.02.2013, 13:27:40
Benutzerbild von meikel (†)
meikel (†) meikel (†) ist offline
SELFPHP Guru
 
Registriert seit: Dec 2003
Ort: Erfurt
Alter: 75
Beiträge: 4.001
AW: select abfrage Kategoriebaum

http://de.wikipedia.org/wiki/Nested_Sets
Mit Zitat antworten
  #3  
Alt 26.02.2013, 13:22:36
Sjard Sjard ist offline
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)
Mit Zitat antworten
  #4  
Alt 26.02.2013, 13:53:41
Benutzerbild von meikel (†)
meikel (†) meikel (†) ist offline
SELFPHP Guru
 
Registriert seit: Dec 2003
Ort: Erfurt
Alter: 75
Beiträge: 4.001
AW: select abfrage Kategoriebaum

Zitat:
Zitat von Sjard Beitrag anzeigen
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.
Mit Zitat antworten
  #5  
Alt 26.02.2013, 14:34:16
Sjard Sjard ist offline
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?
Mit Zitat antworten
  #6  
Alt 26.02.2013, 15:36:57
eleven eleven ist offline
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 Beitrag anzeigen
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)
Mit Zitat antworten
  #7  
Alt 26.02.2013, 16:40:14
eleven eleven ist offline
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
Mit Zitat antworten
  #8  
Alt 26.02.2013, 17:44:54
Benutzerbild von meikel (†)
meikel (†) meikel (†) ist offline
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."
Mit Zitat antworten
  #9  
Alt 27.02.2013, 09:27:06
eleven eleven ist offline
Anfänger
 
Registriert seit: Feb 2013
Alter: 49
Beiträge: 7
AW: select abfrage Kategoriebaum

Zitat:
Zitat von meikel Beitrag anzeigen
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.


Da haste eben Pech.
"Warum einfach, wenns auch umständlich geht."
"Nichts ist haltbarer als ein Provisorium."
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
Mit Zitat antworten
  #10  
Alt 27.02.2013, 10:14:50
Benutzerbild von meikel (†)
meikel (†) meikel (†) ist offline
SELFPHP Guru
 
Registriert seit: Dec 2003
Ort: Erfurt
Alter: 75
Beiträge: 4.001
AW: select abfrage Kategoriebaum

Zitat:
Zitat von eleven Beitrag anzeigen
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...
Mit Zitat antworten
Antwort

Stichworte
kategoriebaum, select


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen
Ansicht

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.

BB-Code ist an.
Smileys sind aus.
[IMG] Code ist aus.
HTML-Code ist aus.

Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Doppelte Abfrage in einem SELECT Mark Knochen MySQLi/PDO/(MySQL) 9 02.09.2010 20:30:07
Ausgabe wird nicht angezeigt Extremefall PHP Grundlagen 9 17.12.2009 08:49:45
select array abfrage problem bluepower2020 PHP Grundlagen 3 14.07.2008 12:28:51
SELECT Abfrage nur mit gefüllten Werten Skyman MySQLi/PDO/(MySQL) 0 24.10.2007 23:01:50
select feld mit if abfrage? Silencer PHP für Fortgeschrittene und Experten 3 20.11.2002 09:34:59


Alle Zeitangaben in WEZ +2. Es ist jetzt 13:20:52 Uhr.


Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.


© 2001-2024 E-Mail SELFPHP OHG, info@selfphp.deImpressumKontakt