php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > SQL / Datenbanken
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


SQL / Datenbanken Probleme mit SQL? Hier könnt ihr eure Fragen zu SQL (MySQL, PostgreSQL, MS-SQL und andere ANSI-SQL Server) los werden.

Antwort
 
LinkBack Themen-Optionen Thema bewerten
  #1 (permalink)  
Alt 21-07-2009, 23:09
francosdad
 Registrierter Benutzer
Links : Onlinestatus : francosdad ist offline
Registriert seit: Mar 2009
Beiträge: 80
francosdad ist zur Zeit noch ein unbeschriebenes Blatt
Standard JOIN inerrhalb einer Tabelle zum auslesen der Kategorien

Hallo,

ich habe folgendes Problem und möchte das nur ungern über eine PHP Schleife erledigen.

Ich habe eine Kategorietabelle mit 2 Spalten:

Kategorie und Elternkategorie

Es kann also jede Kategorie auch eine Elternkategorie sein, mal zum Beispiel:

Code:
+---------------+-----------+
| categories_id | parent_id |
+---------------+-----------+
|             1 |         0 | 
|             2 |         0 | 
|             3 |         2 | 
|             4 |         9 | 
|             5 |         9 | 
|             6 |         9 | 
|             7 |         9 | 
|             8 |         0 | 
|             9 |         0 | 
|            10 |         9 | 
|            11 |         8 | 
|            12 |         9 | 
|            13 |         9 | 
|            14 |         2 | 
|            15 |         2 | 
|            16 |         2 | 
|            17 |         9 | 
|            18 |         0 | 
|            19 |         2 | 
|            20 |         9 | 
|            21 |         0 | 
|            22 |        21 | 
|            23 |         2 | 
|            24 |         2 | 
|            25 |         3 | 
|            26 |         3 | 
|            27 |         3 | 
|            28 |         3 | 
|            29 |         3 | 
|            30 |         8 | 
|            31 |         8 | 
|            32 |        18 | 
|            33 |        18 | 
|            34 |        18 | 
|            35 |         9 | 
|            36 |         9 | 
|            37 |         9 | 
|            38 |         9 | 
|            39 |         9 | 
|            40 |         0 | 
|            41 |        40 | 
|            42 |         8 | 
|            43 |         8 | 
|            44 |        40 | 
|            45 |        40 | 
|            46 |        40 | 
|            47 |         8 | 
|            48 |        21 | 
|            49 |         8 | 
|            50 |        40 | 
|            51 |        18 | 
|            52 |        40 | 
|            53 |        40 | 
|            54 |         8 | 
|            55 |         9 | 
|            56 |         8 | 
|            57 |         8 | 
|            58 |         8 | 
|            59 |         9 | 
|            60 |         0 | 
|            61 |        60 | 
|            62 |        60 | 
|            63 |        21 | 
|            64 |         9 | 
|            65 |        60 | 
|            66 |         0 | 
|            67 |        66 | 
|            68 |        66 | 
|            69 |        40 | 
|            70 |        21 | 
|            71 |         9 | 
|            72 |        60 | 
|            73 |        40 | 
|            74 |         8 | 
|           138 |       137 | 
|           139 |       150 | 
|           140 |       137 | 
|           141 |       150 | 
|           142 |       150 | 
|           143 |       137 | 
|           144 |       137 | 
|           145 |         8 | 
|           146 |         8 | 
|           147 |         9 | 
|           148 |        79 | 
|           149 |        80 | 
|           150 |       137 | 
|           151 |        77 | 
|           152 |       148 | 
|           153 |        81 | 
|           154 |        84 | 
|           155 |       149 | 
|           156 |        76 | 
|           158 |       151 | 
|           159 |       158 | 
|           160 |       158 | 
|           161 |       158 | 
|           162 |       158 | 
|           163 |       158 | 
|           164 |       158 | 
+---------------+-----------+
Ich nehme jetzt die Kategorie 164 und sehe, dass diese mit 158 verknüpft ist und diese wiederum mit 151, 151 mit 77 usw.

Wie kann ich das aber abfragen ausgehend von einer vorgegeben Kategorie ID.

Ich habe schon viel mit joins rumexperimentiert, aber nicht hat zu einem Ergebnis geführt. Ich bin als für jeden Vorschlag offen.

Eine PHP-Schleife sollte nur die letzte Lösung sein.

Vielen Dank im Voraus.

Michael
Mit Zitat antworten
  #2 (permalink)  
Alt 21-07-2009, 23:56
kuddeldaddeldu
 Registrierter Benutzer
Links : Onlinestatus : kuddeldaddeldu ist offline
Registriert seit: Sep 2006
Beiträge: 437
kuddeldaddeldu ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Hi,

mit einem Adjacency List Model kommst Du um eine Schleife bzw. Rekursion nicht herum.
Hier hast Du Lesestoff. Die dort angesprochene Alternative ist auch unter der Bezeichnung "Nested Sets" bekannt.

LG
Mit Zitat antworten
  #3 (permalink)  
Alt 22-07-2009, 18:16
francosdad
 Registrierter Benutzer
Links : Onlinestatus : francosdad ist offline
Registriert seit: Mar 2009
Beiträge: 80
francosdad ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Danke für den Link.

So hatte ich es schon, aber jetzt ist mir klar das es wohl eben nicht in der Datenbank geht, sondern die Abfrage über eine Schleife erfolgt.

Mein Traum war es, die Daten quasi schon fertig aus der Datenbank zu bekommen.

Danke und beste Grüsse.
Michael
Mit Zitat antworten
  #4 (permalink)  
Alt 22-07-2009, 19:53
h3ll
 Registrierter Benutzer
Links : Onlinestatus : h3ll ist offline
Registriert seit: Mar 2008
Beiträge: 3.576
h3ll befindet sich auf einem aufstrebenden Ast
Standard

Schau dir mal Nested Sets an.

Siehe auch:
http://dev.mysql.com/tech-resources/...ical-data.html
Mit Zitat antworten
  #5 (permalink)  
Alt 22-07-2009, 20:15
piratos
 Guest
piratos
Beiträge: n/a
Standard

Vielleicht mal einen solchen Ansatz testen:
Zitat:
SELECT *
FROM a AS node, a AS parent
WHERE node.categories_id =2
OR parent.parent_id = node.categories_id
GROUP BY node.categories_id
ORDER BY node.categories_id
Tabelleninhalt:
Zitat:
categories_id parent_id
1 4
2 1
3 2
4 2
5 1
6 1
Ausgabe (gesucht nach 2)

Zitat:
categories_id parent_id categories_id parent_id
1 4 2 1
2 1 1 4
4 2 1 4
2 ist mit 1, 1 mit 4 und 4 mit 2 verbunden.
Mit Zitat antworten
  #6 (permalink)  
Alt 22-07-2009, 20:19
h3ll
 Registrierter Benutzer
Links : Onlinestatus : h3ll ist offline
Registriert seit: Mar 2008
Beiträge: 3.576
h3ll befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von piratos Beitrag anzeigen
Vielleicht mal einen solchen Ansatz testen:
Tabelleninhalt:
Ausgabe (gesucht nach 2)

2 ist mit 1, 1 mit 4 und 4 mit 2 verbunden.
Ist auf eine fixe Anzahl an Ebenen begrenzt.

Außerdem würde ich empfehlen keine Theta-Style Joins zu verwenden, weil die mit der Größe ziemlich unübersichtlich werden.
Mit Zitat antworten
  #7 (permalink)  
Alt 22-07-2009, 20:31
francosdad
 Registrierter Benutzer
Links : Onlinestatus : francosdad ist offline
Registriert seit: Mar 2009
Beiträge: 80
francosdad ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Ich denke die Sache mit den nested Sets ist schon die beste, weil eben flexibel in der Hierarchie.

Das Problem mit zu viel Joins ist natürlich auch, dass man damit ganz schön die Datenbank quält.

Grüsse
Michael
Mit Zitat antworten
  #8 (permalink)  
Alt 22-07-2009, 21:01
piratos
 Guest
piratos
Beiträge: n/a
Standard

Ich gehe zunächst davon aus was ein Frager hat und das war ein funktionierender Lösungsansatz.

Wenn er neu aufbaut - es gibt auch andere Hierarchiemodell die durchaus ihre Vorteile haben, das wird jeder wissen der mal eine Entscheidung für oder gegen NS treffen musste.

NS selbst ist keine Sache die man by the fly vollständig geproggt hat.

Und wer sicher gehen will sollte da unbedingt mit Transactionen und Mysql InnoDB arbeiten.
InnodDB hat aber neben Vorteilen auch Nachteile - das muss man wissen.

Also dann viel Spass mit NS.
Mit Zitat antworten
  #9 (permalink)  
Alt 23-07-2009, 12:02
kuddeldaddeldu
 Registrierter Benutzer
Links : Onlinestatus : kuddeldaddeldu ist offline
Registriert seit: Sep 2006
Beiträge: 437
kuddeldaddeldu ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Hi,

Zitat:
Zitat von francosdad Beitrag anzeigen
So hatte ich es schon, aber jetzt ist mir klar das es wohl eben nicht in der Datenbank geht, sondern die Abfrage über eine Schleife erfolgt.
Ich hatte Dir den Link ja auch wegen der dort vorgestellten Alternative (MPTT auch bekannt als Nested Sets, wie auch h3ll sie Dir empfiehlt) gepostet. Der Artikel hat 3 Seiten.

Zitat:
Zitat von piratos Beitrag anzeigen
Ich gehe zunächst davon aus was ein Frager hat und das war ein funktionierender Lösungsansatz.
Aber in seinem Eingangspost ist doch deutlich zu sehen, dass er mehr als nur eine Unterebene hat und einen gesamten Pfad auslesen will...

Zitat:
Zitat von piratos Beitrag anzeigen
Wenn er neu aufbaut - es gibt auch andere Hierarchiemodell die durchaus ihre Vorteile haben, das wird jeder wissen der mal eine Entscheidung für oder gegen NS treffen musste.
Mag sein. Dann schlag ihm doch ein Modell vor, dass Deiner Meinung nach besser geeignet ist für seinen Anwendungsfall.

LG
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[MySQL 4.1] Join: neuester Wert aus einer Tabelle DMKlein SQL / Datenbanken 4 15-10-2007 08:28
[SQL allgemein] JOIN von 2 Spalten der einen mit einer Spalte einer anderen Tabelle Sebinho SQL / Datenbanken 2 08-12-2006 17:40
[SQL JOIN] Join mit zählen in einer anderen Tabelle tontechniker SQL / Datenbanken 1 19-05-2006 11:03
Auslesen einer Tabelle Zocker SQL / Datenbanken 7 28-07-2005 17:26
[SQL allgemein] Selbstreferenzierende Tabelle auslesen (rekursiver JOIN ?) QCO SQL / Datenbanken 0 05-06-2003 12:22

Themen-Optionen
Thema bewerten
Thema bewerten:

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 an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an


PHP News

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht
ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Berni

Wissensbestand in Unternehmen
Wissensbestand in UnternehmenLebenslanges Lernen und Weiterbilden sichert Wissensbestand in Unternehmen

25.05.2018 | Berni


 

Aktuelle PHP Scripte

PHP Server Monitor

PHP Server Monitor ist ein Skript, das prüft, ob Ihre Websites und Server betriebsbereit sind.

11.09.2018 Berni | Kategorie: PHP/ Security
PHP WEB STATISTIK ansehen PHP WEB STATISTIK

Die PHP Web Statistik bietet Ihnen ein einfach zu konfigurierendes Script zur Aufzeichnung und grafischen und textuellen Auswertung der Besuchern Ihrer Webseite. Folgende zeitlichen Module sind verfügbar: Jahr, Monat, Tag, Wochentag, Stunde Folgende son

28.08.2018 phpwebstat | Kategorie: PHP/ Counter
Affilinator - Affilinet XML Produktlisten Skript

Die Affilinator Affilinet XML Edition ist ein vollautomatisches Skript zum einlesen und darstellen der Affili.net (Partnerprogramm Netzwerk) Produktlisten und Produktdaten. Im Grunde gibt der Webmaster seine Affilinet PartnerID ein und hat dann unmittelb

27.08.2018 freefrank@ | Kategorie: PHP/ Partnerprogramme
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 00:46 Uhr.