php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > PHP Developer Forum
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Fragen zu Laravel, YII oder anderen PHP-Frameworks.

Antwort
 
LinkBack Themen-Optionen Thema bewerten
  #1 (permalink)  
Alt 11-05-2008, 00:31
Speedyspin
 Registrierter Benutzer
Links : Onlinestatus : Speedyspin ist offline
Registriert seit: Dec 2003
Beiträge: 20
Speedyspin ist zur Zeit noch ein unbeschriebenes Blatt
Standard Tabellen-Problem

Hi!

Also, ich hab folgendes Problem:
Damit es einfacher verständlich ist, werde ich das Problem auf eine andere Thematik anwenden.
In einem Forum gibt es ja Kategorien und Unterkategorien. Wenn ja jede Unterkategorie eine Kategorie hat, ist das ja kein Problem. Ich nehm einfach die Id als Verweis.
Wie ist das dann wenn sich 2 Kategorien dieselbe Unterkategorie teilen?
Geht das dann einfach so, dass ich in der Unterkategorietabelle eine Spalte anleg, wo ich die Ids der Kategorien angebe?

Mein Lösungsvorschlag wäre:
Ich schreib in der o.g. Spalte einfach so die Ids auf: 1;2;3
und les dann die einzelnen Nummern über eine Stringfunktion aus.
Ist das zu umständlich? Geht das geschickter?
Mit Zitat antworten
  #2 (permalink)  
Alt 11-05-2008, 01:05
Maribel
 Newbie
Links : Onlinestatus : Maribel ist offline
Registriert seit: May 2008
Beiträge: 87
Maribel ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Nein, besser ist es, Du legst jedesmal eine neue Tabelle an, die Du dann verknüpfen kannst, weil Du sonst redunate Daten erzeugst.

Schau Dir einfach mal die 4 Normalformen von Datenbanken an.
Ziel ist es, alle Daten nur einmal zu speichern und immer auf 1:n Verknüpfungen zu kommen.

Gruß Maribel

Geändert von Maribel (11-05-2008 um 01:07 Uhr)
Mit Zitat antworten
  #3 (permalink)  
Alt 11-05-2008, 01:22
Speedyspin
 Registrierter Benutzer
Links : Onlinestatus : Speedyspin ist offline
Registriert seit: Dec 2003
Beiträge: 20
Speedyspin ist zur Zeit noch ein unbeschriebenes Blatt
Standard

aber ich verknüpfe doch die Unterkategorie mit der Kategorie.
In der Unterkategorie steht doch drin welche übergeordnete Kategorie ich habe.
Ich versuchs mal anders zu schildern:
Ein Automodell hat einen Motor. Dieses Motormodell wird aber auch in einem anderen Automodell verbaut.
Dann hab ich ja eine Tabelle mimt Motoren und eine mit Automodellen.
In der einen Spalte bei den Motoren stehen ja die Auto-IDs.
Wie lös ich das jetzt? Ich habe ja hier zwei Auto-IDs stehen...
EDIT: Was ist eine 1:n Tabelle?

Geändert von Speedyspin (11-05-2008 um 02:43 Uhr)
Mit Zitat antworten
  #4 (permalink)  
Alt 11-05-2008, 12:37
Flip7
 Registrierter Benutzer
Links : Onlinestatus : Flip7 ist offline
Registriert seit: May 2007
Ort: Munich
Beiträge: 126
Flip7 ist zur Zeit noch ein unbeschriebenes Blatt
Flip7 eine Nachricht über ICQ schicken
Standard

ich glaube du suchst nested joins?

funktioniert wie folgt, und ist ähnlich zu deiner variante, aber nicht mit strings, weil strings möglichst nur zur speicherung von irgendwelchen text oder ähnlich dienen sollte und möglichst nicht in where oder joins!

Ich würde die tabelle wie folgt ausbauen:


Tabelle:

int id, varchar topic

100000000, 'Forumsthreads'
200000000, 'Gossip'
300000000, 'Sonstiges'
...
9900000000, 'letzte kategorie'

101000000, 'ich bin direkt unter der kategorie forumsthread'
199000000, 'ich die letzte kategorie direkt unter der kategorie forumsthread'
201000000, 'und ich direkt unter Gossip'
...
9901000000, 'erste kategorie unter der "letzten kategorie"'
9999000000, 'letzte kategorie unter der "letzten kategorie"'

101010000, 'ich bin in der dritten Ebene unter "Forumsthread" / "ich bin direkt unter der kategorie forumsthread"'
...
9999999999, 'ich bin theoretisch die letzte kategorie, außer ich nutze "alle" int Werte'


du musst hier halt einen kompromiss zwischen anzahl der ebenen und anzahl der kategorien in den Ebenen finden!

wenn du unendlich ebenen haben willst, dann müsstest du das glaub ich mit binary statt int probieren und dann einen riesigen bereich allokieren.

wenn dir das zu kompliziert ist, kannst du dich mal mit prozeduren befassen, oder du benutzt mehrere abfragen in PHP schleifen, aber am besten ist es, wenn sql nur einmal eine anfrage bekommt. Also nimm nested joins oder rekursive funktionen oder prozeduren (sorry kann grad nicht näher erklären, wie des unter sql läuft)!

hoffe ich konnte dir helfen!

greetz Flip
__________________
Find Parties?
Partysuche
Mit Zitat antworten
  #5 (permalink)  
Alt 11-05-2008, 14:42
Speedyspin
 Registrierter Benutzer
Links : Onlinestatus : Speedyspin ist offline
Registriert seit: Dec 2003
Beiträge: 20
Speedyspin ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Man, da is ja meine Methode auch nich viel schlechter.
Bei deiner müsste ich ja genauso die lange Zahl aufbröseln und schaun, zu welchem topic die gehört
Mit Zitat antworten
  #6 (permalink)  
Alt 11-05-2008, 17:45
Flip7
 Registrierter Benutzer
Links : Onlinestatus : Flip7 ist offline
Registriert seit: May 2007
Ort: Munich
Beiträge: 126
Flip7 ist zur Zeit noch ein unbeschriebenes Blatt
Flip7 eine Nachricht über ICQ schicken
Standard

eine zahl mit modulo, geteilt oder sonst was "aufbröseln" braucht VIEL weniger zeit, also einen string zu verarbeiten!

die zahl 8 = 2 * 2 * 2 = 3 Bit
der text "8" = 1 Byte = 8 Bit

die zahl 1073741824 = 2 ^30 = 30 Bit
der text "1073741824" = 10 Byte = 10 * 8 Bit = 80 Bit

wie du siehst verwendet meine methode ALLE möglichen kombinationen, während deine nur immer pro stelle 10 von 256 möglichen kombinationen verwendet!

wie du siehst ist deine Methode (wenn du nicht alles ascii zeichen verwendest) unvorteilhaft! wenn du weißt, dass dein forum maximal 100 user auf einmal versorgen muss, dann ist das kein problem! aber bei 1000 leuten wirds schon schwieriger!

Aber mach es wie du willst! Ist ja deine Serverperformace.

greetz Flip
__________________
Find Parties?
Partysuche
Mit Zitat antworten
  #7 (permalink)  
Alt 11-05-2008, 18:50
h3ll
 Registrierter Benutzer
Links : Onlinestatus : h3ll ist offline
Registriert seit: Mar 2008
Beiträge: 3.604
h3ll befindet sich auf einem aufstrebenden Ast
Standard

Man kann natürlich alles unnötig kompliziert machen.

Der einfache Weg:
- Eine Tabelle mit allen Kategorien (egal ob Unterkategorie oder sonst was)
- Eine Tabelle, die für die Struktur der Kategorien zuständig ist

Tabelle für Kategorien:

Code:
 id  name
--------------------
 1   Kategorie 1
 2   Kategorie 2
 3   Kategorie 3
 4   Kategorie 4
 5   Kategorie 5
Tabelle für die Struktur (cat_id = ID der Kategorie):

Code:
 id  parent_id  cat_id 
-----------------------
 1   0          1
 2   1          2
 3   1          3
 4   0          4
 5   4          2
 6   4          5
So kannst du die Kategorien so oft verwenden, wie du willst und ersparst dir den Blödsinn mit irgendwelchen schwindligen 10-stelligen Zahlencodes.

Das ganze würde dann aufgebaut so aussehen:

Code:
- Kategorie 1
    - Kategorie 2
    - Kategorie 3

- Kategorie 4
    - Kategorie 2
    - Kategorie 5
Funktioniert über beliebig viele Ebenen und beliebig viele Kategorien.

Geändert von h3ll (11-05-2008 um 18:58 Uhr)
Mit Zitat antworten
  #8 (permalink)  
Alt 12-05-2008, 00:15
Speedyspin
 Registrierter Benutzer
Links : Onlinestatus : Speedyspin ist offline
Registriert seit: Dec 2003
Beiträge: 20
Speedyspin ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Die Lösung gefällt mir, danke!
Mit Zitat antworten
  #9 (permalink)  
Alt 13-05-2008, 00:13
Flip7
 Registrierter Benutzer
Links : Onlinestatus : Flip7 ist offline
Registriert seit: May 2007
Ort: Munich
Beiträge: 126
Flip7 ist zur Zeit noch ein unbeschriebenes Blatt
Flip7 eine Nachricht über ICQ schicken
Standard

Zitat:
Man kann natürlich alles unnötig kompliziert machen.
Man könnte sein Hirn auch mal einschalten um zu merken, das in keinem forum eine kategorie unterkategorie in verschieden ebenen ist!

außerdem würde mich mal der SQL Befehl interessieren, der keine simple SELECT anweisung wird!
__________________
Find Parties?
Partysuche
Mit Zitat antworten
  #10 (permalink)  
Alt 13-05-2008, 00:30
h3ll
 Registrierter Benutzer
Links : Onlinestatus : h3ll ist offline
Registriert seit: Mar 2008
Beiträge: 3.604
h3ll befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Original geschrieben von Flip7
Man könnte sein Hirn auch mal einschalten um zu merken, das in keinem forum eine kategorie unterkategorie in verschieden ebenen ist!
Das war nicht meine Idee sondern seine Anforderung. Wie wärs mal, wenn du dein eigenes Hirn einschaltest?

Zitat:
außerdem würde mich mal der SQL Befehl interessieren, der keine simple SELECT anweisung wird!
Ist ein simples LEFT JOIN. Und nein, ich bring dir jetzt nicht MySQL bei.

Geändert von h3ll (13-05-2008 um 00:33 Uhr)
Mit Zitat antworten
  #11 (permalink)  
Alt 13-05-2008, 13:34
Flip7
 Registrierter Benutzer
Links : Onlinestatus : Flip7 ist offline
Registriert seit: May 2007
Ort: Munich
Beiträge: 126
Flip7 ist zur Zeit noch ein unbeschriebenes Blatt
Flip7 eine Nachricht über ICQ schicken
Standard

Ich hab ehrlichgesagt keine Lust mich mit einem Gschaftler wie dir zu streiten.
Aber man muss ja nicht gleich die Lösungen anderer verurteilen!

Wie willst du dir eine komplette Hierachie ausgeben, wenn nicht nicht weißt, wieviele JOINS du brauchst?
__________________
Find Parties?
Partysuche
Mit Zitat antworten
  #12 (permalink)  
Alt 13-05-2008, 13:38
h3ll
 Registrierter Benutzer
Links : Onlinestatus : h3ll ist offline
Registriert seit: Mar 2008
Beiträge: 3.604
h3ll befindet sich auf einem aufstrebenden Ast
Standard

Man braucht nur einen LEFT JOIN. Die Hierarchie baut man sich anhand der parent_id mein einer foreach-Schleife zusammen.

Deine Lösung ist einfach nicht skalierbar und außerdem unnötig aufwändig.
Mit Zitat antworten
Antwort

Lesezeichen


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

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

Die RIGID-FLEX-Technologie
Die RIGID-FLEX-TechnologieDie sogenannte "Flexible Elektronik" , oftmals auch als "Flexible Schaltungen" bezeichnet, ist eine zeitgemäße Technologie zum Montieren von elektronischen Schaltungen.

06.12.2018 | Berni

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


 

Aktuelle PHP Scripte

HeidiSQL - kostenloses MySQL front-end Editor für Windows ansehen HeidiSQL - kostenloses MySQL front-end Editor für Windows

HeidiSQL - ist ein Windows-Editor für die bekannt open Source Datenbank mySQL

10.12.2018 Berni | Kategorie: MYSQL/ Management
piwik Open-Source Webanalyse-Software ansehen piwik Open-Source Webanalyse-Software

piwik ist eine gute Alternative zu Google Analytics. Viele Features und ein modernes Erscheinungsbild mit aussagefähigen Statistiken in Echtzeit

10.12.2018 phpler | Kategorie: PHP/ Besucherzaehler
jQuery Mobile ansehen jQuery Mobile

Touch-Optimized Web Framework für Smartphones & Tablets

09.12.2018 phpler | Kategorie: AJAX/ Framework
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 03:31 Uhr.