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 > PHP Grundlagen
Hilfe Community Kalender Heutige Beiträge Suchen

PHP Grundlagen Hier kann über grundlegende Probleme oder Anfängerschwierigkeiten diskutiert werden

Antwort
 
Themen-Optionen Ansicht
  #1  
Alt 31.08.2009, 15:59:22
BloodySword BloodySword ist offline
Anfänger
 
Registriert seit: Jan 2009
Alter: 36
Beiträge: 12
MySQL: Rekursiv

Hallo, ich habe ein ziemliches Problem. Undzwar schreibe ich gerade ein eigenes Forum. Ich kann aus verschiedenen Gründen kein fertiges nehmen, aber darum geht es hier nicht.

Ein Forum kann beliebig viele ineinander verschachtelte Unterforen haben.
Die Frage ist nun folgendes: Wie finde ich heraus, ob das Unterforum betreten werden darf, wenn ich nur die Unterforum ID habe? Ein Forum oder ein Unterforum bekommt ein rank_visible-wert. Ist dieser =4 bedeutet es, dass es nur Admins sehen dürfen.

Forum 1
Forum 2 ist in Forum 1 eingegliedert
Forum 1 hat rank_visible=4, forum 2 nicht.

Wie finde ich nun heraus, dass Forum 2 von einem User nicht betreten werden darf, weil ja Forum 1 nur für Admins ist?

Muss ich da alle rank_visibles rückwärts durch gehen, bis diese sich ändert?

lg
Mit Zitat antworten
  #2  
Alt 31.08.2009, 16:33:30
DokuLeseHemmung DokuLeseHemmung ist offline
SELFPHP Experte
 
Registriert seit: Jun 2008
Alter: 15
Beiträge: 2.269
AW: MySQL: Rekursiv

Ja.
Man kann zwar rekursiv löschen (15 Ebenen tief), aber nicht SELECTen.
Du könntest alternativ auf "Nested Sets" umsteigen.
Mit Zitat antworten
  #3  
Alt 31.08.2009, 17:28:21
BloodySword BloodySword ist offline
Anfänger
 
Registriert seit: Jan 2009
Alter: 36
Beiträge: 12
AW: MySQL: Rekursiv

Zitat:
Zitat von DokuLeseHemmung Beitrag anzeigen
Ja.
Man kann zwar rekursiv löschen (15 Ebenen tief), aber nicht SELECTen.
Du könntest alternativ auf "Nested Sets" umsteigen.
Ich hab das jetzt so gelöst, dass ich eben damit lebe. :) Der Admin hat dann eben auch darauf zu achten, dass er die Rechteverteilung auch in den Unterforen richtig einstellt. Ich denke das ist kein Problem. Man könnte es auch als ein Feature betrachten, zumal man dann bestimmte Forenbereiche wieder öffnen kann.

Dabei bleibt nur die Frage wie ich das mache, dass dann das Forum mit Rank_visible=4 trotzdem gelistet wird, weil es irgendwo ein Unterforum hat, wo auch User mit einem schwächeren Rank willkommen sind... Ich denke darauf muss ich dann verzeichten. Man kann ja für den Fall auch den Link des Unterforums weiter geben. Außerdem wird dies in der Praxis eh extrem selten verwendet.

Was sind "Nested Sets"? Davon hab ich noch nicht gehört.

Edit:

Code:
CREATE TABLE `forum` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `order` bigint(20) NOT NULL,
  `parent_id` bigint(20) NOT NULL,
  `user_id` bigint(20) NOT NULL,
  `user_name` varchar(128) NOT NULL,
  `date_created` datetime NOT NULL,
  `date_edited` datetime NOT NULL,
  `ehit_count` bigint(20) NOT NULL,
  `is_closed` tinyint(1) NOT NULL,
  `rank_visible` tinyint(3) NOT NULL,
  `type` tinyint(1) NOT NULL COMMENT '0=Forum;1=Thread;2=Post;3=Spacer',
  `post_count` bigint(20) NOT NULL,
  `themes_count` bigint(20) NOT NULL,
  `latest_post_id` bigint(20) NOT NULL,
  `is_sticky` tinyint(1) NOT NULL,
  `is_top` tinyint(1) NOT NULL,
  `is_announce` tinyint(1) NOT NULL,
  `mods` varchar(255) NOT NULL,
  `title` varchar(255) NOT NULL,
  `content` text NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 ;
So sieht die Tabelle für das (gesamte!!) Forum aus.

Wie parent_id schon sagt, lässt sich damit alles Mögliche in einander verschachteln.
ehit_count ist kein Tippfehler. Dieses Feld wird gleichzeitig für die Anzahl der Edits bei einem Thread oder Post, als auch für die Anzahl der Hits bei einem Forum oder verwendet :).

Interesant wird es auch, wenn ein Post in einem Thread gemacht wird. Dann muss ich rückwärts die Struktur durchgehen und dort die Anzahl der Posts sowie die ID des neusten Posts zu aktualisieren. Ist aber kein Problem.

Ähnliches habe ich auch realisiert um den Pfad in dem der User sich gerade befindet anzuzeigen. :)

lg

Geändert von BloodySword (31.08.2009 um 17:39:43 Uhr)
Mit Zitat antworten
  #4  
Alt 31.08.2009, 18:18:01
DokuLeseHemmung DokuLeseHemmung ist offline
SELFPHP Experte
 
Registriert seit: Jun 2008
Alter: 15
Beiträge: 2.269
AW: MySQL: Rekursiv

Zitat:
Was sind "Nested Sets"?
Du könntest Google oder irgendeine andere SUMA befragen...
Mit Zitat antworten
  #5  
Alt 31.08.2009, 18:22:56
Benutzerbild von Domi
Domi Domi ist offline
Senior Member
 
Registriert seit: Nov 2003
Ort: Kempten @ Allgäu
Alter: 36
Beiträge: 1.408
AW: MySQL: Rekursiv

nested sets ... guter Input! Aber werden die in der Praxis wirklich viel verwendet? Bisher hab ich mir das eigentlich immer "von Hand" zusammengebaut, ist halt die Frage, wie viel von der performance rüberkommt und ob das den Aufwand gerechtfertigt.
__________________

the best way to be ready for the future is to invent it
Mit Zitat antworten
  #6  
Alt 31.08.2009, 18:57:10
DokuLeseHemmung DokuLeseHemmung ist offline
SELFPHP Experte
 
Registriert seit: Jun 2008
Alter: 15
Beiträge: 2.269
AW: MySQL: Rekursiv

Ist natürlich nervig, wenn man das selbst klöppelt. Aber es gibt ja einiges vorgefertigtes.
Z.B.: http://www.doctrine-project.org/docu...rarchical-data
Ist genial, damit ist es ein Kinderspiel.

Und die Leseperformance steigt mit der tiefe des Baumes, im Verhältnis zu binär Bäumen.
Und schwächelt beim ein/austragen von Blättern/Knoten.
Mit Zitat antworten
  #7  
Alt 01.09.2009, 10:12:03
Benutzerbild von xabbuh
xabbuh xabbuh ist offline
SELFPHP Guru
 
Registriert seit: May 2003
Beiträge: 7.187
AW: MySQL: Rekursiv

Zitat:
Zitat von DokuLeseHemmung Beitrag anzeigen
Und die Leseperformance steigt mit der tiefe des Baumes, im Verhältnis zu binär Bäumen.
Und schwächelt beim ein/austragen von Blättern/Knoten.
Absolut, wobei die Schreibperformance in einem Forum sicherlich vernachlässigbar ist, so lange nur die Forenstruktur und nicht die Beiträge damit abgebildet werden. Auf der anderen Seite muss man sich aber auch fragen, ob die Forenstruktur wirklich so ausgeprägt sein wird, dass Lesezugriffe auf eine Nested Set-Datenstruktur merkbar schneller sind.

Gruß
Mit Zitat antworten
  #8  
Alt 01.09.2009, 10:59:34
BloodySword BloodySword ist offline
Anfänger
 
Registriert seit: Jan 2009
Alter: 36
Beiträge: 12
AW: MySQL: Rekursiv

Ich jedenfalls hab mich entschieden so weiter zu machen wie bisher. Ich denke das ist vollkommen ausreichend, nicht wahr? (Siehe Tabelle)

Es werden vielleicht noch die ein oder anderen Spalten entfernt oder hinzugefügt werden aber sonst sehe ich das ganze schon als stabil genug an.

BTW.: Weiß jemand von euch wie man eine Baumansicht mit Smarty rendert? Mit {foreach} wird das nicht gehen, ich müsste dann ja im template unendlich viele {foreach} schachteln.

lg
Mit Zitat antworten
  #9  
Alt 01.09.2009, 11:11:41
Benutzerbild von Domi
Domi Domi ist offline
Senior Member
 
Registriert seit: Nov 2003
Ort: Kempten @ Allgäu
Alter: 36
Beiträge: 1.408
AW: MySQL: Rekursiv

Zitat:
Zitat von BloodySword Beitrag anzeigen
BTW.: Weiß jemand von euch wie man eine Baumansicht mit Smarty rendert? Mit {foreach} wird das nicht gehen, ich müsste dann ja im template unendlich viele {foreach} schachteln.

lg
Rekursion ist das Zauberwort. Du kannst nämlich auch in Smarty so kleine Funktionen bauen, außerdem kannst du teilweise PHP-Funktion verwenden, denke da daran zu übrtprüfen mit empty(), isset() usw, geht alles einfach so in Smarty.
__________________

the best way to be ready for the future is to invent it
Mit Zitat antworten
  #10  
Alt 01.09.2009, 12:52:18
BloodySword BloodySword ist offline
Anfänger
 
Registriert seit: Jan 2009
Alter: 36
Beiträge: 12
AW: MySQL: Rekursiv

Ich schau mal in die Smarty-Doku oder mit Google. Wenn ich dort nichts finde komme ich nochmal auf euch zurück ^^'.

Vielen Dank!

Geändert von BloodySword (01.09.2009 um 13:04:10 Uhr)
Mit Zitat antworten
Antwort


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.

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
Rekursiv Daten aus einer MYSQL Tabelle auslesen blankend MySQLi/PDO/(MySQL) 14 24.11.2008 18:25:34
MySQL 4 "große" Abfragen coder90 MySQLi/PDO/(MySQL) 0 06.09.2008 13:45:08
Mysql startet nicht oberonal MySQLi/PDO/(MySQL) 3 24.11.2006 09:41:31
MySQL Page Script. Problem. dtone MySQLi/PDO/(MySQL) 8 15.10.2006 14:58:06
MySQL - ORDER BY RAND() und PHP MacMarc PHP Grundlagen 15 05.12.2002 22:23:39


Alle Zeitangaben in WEZ +2. Es ist jetzt 19:45:34 Uhr.


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


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