Folgendes Datenbankmodell okay?
Peter H.
- datenbank
Hallo,
1. ich habe eine Seite mit den Bereichen
z.b.:
Boards, Cooleseiten, uncooleseiten, tolleseiten, untolleseiten
2. Jeder dieser Bereiche hat ne eigene Tabelle mit vielen Internetseiten.
3. Jede Seite hat bestimmte Themen(kann mehrere haben)
4. jede seite hat eine Bewertung die sich errechnet durch "Bewertungswert /(durch) Anzahl-der-Bewertungen" also wenn jemand einer Seite eine 10(man kann von 1-10 wählen) gibt dann wird bewertungswert=bewertungswert+10 gerechnet und Anzahl-der-Bewertungen=Anzahl-der-Bewertungen+1 ..
5. es wird gezählt wie oft jemand von meiner seite aus auf einen der links klickt.
nun hab ich das alles so unterteilt:
der wert "id" ist in jeder tabelle "auto_increment"..
1. Tabelle (Seiten-Bereiche)
id bereiche
0 Boards
1 Cooleseiten
2 uncooleseiten
3 tolleseiten
4 untolleseiten
...
2./3./4./5./6. Tabelle ( für jeden bereich eine tabelle)
id boards (weitere spalten mit anderen infos)...
0 link
1 link
2 link
4 link
...
7. Tabelle ( Themen )
id thema
0 thema 1
1 thema 2
2 thema 3
3 thema 4
4 thema 5
...
So nun sollen aus diesen Tabellen die anderen Tabellen mit ihren IDs zsm "arbeiten" und ich will nachher mit Joins darauf zugreifen.
Beispiel 1 Bewertungen:
8. Tabelle (Bewertungen)
id bereich seite anzahl-der-bewertungen bewertungswert
0 2 1 9 90
* Heißt dann das dass bewertungs id 0 ist mit der seite 1 aus dem bereich 2(uncooleseiten) und die durchschnittliche Bewertungszahl (bewertungswert/anzahl-der-bewertungen) = 10 ist!
Beispiel 2 "Ausgänge" (wie oft hat jmd auf den Link geklickt)
id bereich seite outgoes
0 0 0 0
** Heißt das ist Ausgangs-Id 0 über die Seite 0 aus Bereich 0 (Boards) mit 0 Ausgängen
Beispiel 3 "Themen und Seiten"
id thema seite bereich
0 1 2 3
1 49 2 3
2 99 2 2
3 122 2 2
4 2 1 1
5 1 3 4
5 2 3 4
*** Heißt das:
Seite 2 aus Bereich 3(tolleseiten) hat die themen 1 und 49
Seite 2 aus Bereich 2(uncooleseiten) hat die themen 99 und 122
Seite 1 aus Bereich 1(cooleseiten) hat das thema 2
Seite 3 aus Bereich 4(untolleseiten)hat auch thema 2 und auch thema 1
Wie realisiere ich das am besten, wäre nett wenn mir jemand für *, ** oder *** mal eine SQL-Abfrage schreiben könnte nur damit ich mit den Joins mal ein anwendungsbezogenes Beispiel für meinen Fall habe.
Gibts Verbesserungsvorschläge?
Danke
Liebe Grüße
Peter H.
Hallo auch ;)
ok hat en moment gedauert bis ich des richtig verstanden habe...
also ich als angehender AE würde die tabellen so machen:
1. Bereiche
ID | Bereich
1 | Boards
2 | Cooleseiten
...
2. Themen
ID | Thema
1 | Pokemon
2 | PHP-Tut
3 | Suchamachinen
...
3. Seiten
ID | Seitenname | Link | Bereich | Anzahl_Bewertung | Bewerdung_Gesamt | Ausgänge
1 | Google | URL | 2 | 1337 | 1339 | 99
...
4. Themen_Seite
ID | Seiten_ID | Thema_ID
1 | 1 | 3
dann isses mit den joints nit so schwer ;) aber naja geht beides...
(tipp: wir nehmen für joins die wir nicht so können MS access und ziehn die uns so zusammen wie wir mögen)
der join für "Seitenname" - "thema" wäre ca:
SELECT Seiten.Seitenname, themen.thema
FROM Seiten INNER JOIN (Themen INNER JOIN themen_seite ON themen.ID = themen_seite.Thema_id) ON seiten.ID = themen_seite.seiten_id
WHERE Seiten.Seitenname="google";
naja ich irre mich bestimmt aber naja ich glaub so wäre der komplizierte join wenn man des in einem machen möchte^^
gruß Sascha
SELECT Seiten.Seitenname, themen.thema
FROM Seiten INNER JOIN (Themen INNER JOIN themen_seite ON themen.ID = themen_seite.Thema_id) ON seiten.ID = themen_seite.seiten_id
WHERE Seiten.Seitenname="google";
Okay das heißt praktisch,
nehme den "Seitennamen" und dessen Themen aus der Tabelle "Seiten"
1. nehme aus "Themen" alle Themen die in "Themen_Seite" mit der "seiten_id" der Seiten.id gleich der Seiten.id wo der Name der Seite "google" ist...
2. Nehme den Seitennamen aus "Seiten" wo der Name "google" ist..
richtig?
omfg, Peter
wenn ich das jetzt richtig verstehe ja^^
sage wir mal so suche alle seiten ids mit den seiten namen "google" aus der tabelle Seiten finde dazu in Thema_seie die dazugehörige themen_id und suche für diese dann die Themenbezeichnung...
in php könnte man des auch in 2 einfacherer anweisungen schreiben...
das der erst alle seitennamen + id sucht
dann 2. anweisung suche zu den ids die themen id
3 anweisung suche zu den themen ids die bezeichnung/ den text whatever raus...
(wenn mans gans ausführlich und einfacher möchte ;) )
gruß Sascha
Hm..
danke ^^.. ich werds mal mit Joins Probieren,
hast du oder noch jemand anderes noch weitere Vorschläge?
Lg
Peda
Also,
ich hab nun folgendes:
1. Tabelle "bewertungen"
anzahl-der-bewertungen bewertungswert seite bereich
10 90 1 1
2. Tabelle "bereiche"
id bereich
1 cooleseiten
3. Tabelle "cooleseiten"
id name-der-seite
1 selhtml.de
Ich möchte nun die Bewertung von Seite "selfhtml.de" haben aus "cooleseiten".
Wie stelle ich das an? Ich komme einfach nicht drauf...
"SELECT anzahl-der-bewertungen, bewertungswert
FROM bewertungen
WHERE bewertungen.bereich=bereiche.id
( INNER JOIN cooleseiten ON cooleseiten.id =
( INNER JOIN cooleseiten ON cooleseiten.name-der-seite='selfhtml.de')
) AND bewertungen.seite = (INNER JOIN cooleseiten ON cooleseiten.id WHERE name-der-seite='selfhtml.de')";
Das kann es ja nicht seine.. =(...
Lg
Peter
Also,
ich hab nun folgendes:
Tabelle "bewertungen"
anzahl-der-bewertungen bewertungswert seite bereich
10 90 1 1Tabelle "bereiche"
id bereich
1 cooleseitenTabelle "cooleseiten"
id name-der-seite
1 selhtml.de
ich glaub immernochnicht das du damit glücklich wirst aber naja...
Ich möchte nun die Bewertung von Seite "selfhtml.de" haben aus "cooleseiten".
Wie stelle ich das an? Ich komme einfach nicht drauf...
SELECT cooleseiten.name, bewertungen.anzahl, bewertungen.summe
FROM bewertungen INNER JOIN cooleseiten ON bewertungen.seite = cooleseiten.id
WHERE (cooleseiten.name="selfhtml");
so in etwa wenn ich mich nich irre^^ nur die tabellen und spalten sind bei mir anders benannt...
Mahlzeit,
Tabelle "bereiche"
id bereich
1 cooleseitenTabelle "cooleseiten"
id name-der-seite
1 selhtml.de
Entschuldige, wenn ich mich nochmal einmische ... aber pro Eintrag in der Tabelle "Bereiche" eine eigene Tabelle mit den jeweiligen Seiten zu diesem Bereich anzulegen ist ziemlicher Schwachsinn und absolut nicht wartbar - was willst Du z.B. machen, wenn vielleicht irgendwann mal ein neuer Bereich dazukommt oder Du einen vorhandenen Bereich herausnehmen willst? Tabellen neu anlegen bzw. löschen und ALLE SQL-Abfragen anpassen?
Sinnvoller wäre:
oder
MfG,
EKKi
Also ich werd mal genau sagen wie die Tabellen heißen und was drin steht:
"boards"
id seitenname link anmeldungnoetig kostenlos altersbegrenzung
"internetchats"
id seitenname link anmeldungnoetig kostenlos altersbregrenzung
"chatclienten"
id client version von kann logo link kostenlos
"ircclienten"
id client version von kann logo link kostenlos
Alle haben dann noch Anz_Bew und Bew als spalte..
Diese will ich auslagern. Wie ihr seht sind die Spalten bei boards und internetchats gleich. Bei Chatclienten und IRCclienten auch.
Aber es sind nicht alle 4 gleich, deswegen pack ich die nicht alle in eine Tabelle ;) ..
Damti fällt diese Methode schonmal weg:
- eine Tabelle "Bereiche" und eine Tabelle "Seiten", wobei in letzterer eine Spalte "BereicheID" (o.ä.) existiert, so dass bei jeder Seite steht, zu welchem Bereich sie gehört
Also habe ich jetzt folgende Methode genommen:
- eine Tabelle "Bereiche", eine Tabelle "Seiten" und eine Zuordnungstabelle "SeitenBereiche", die außer ihrer eigenen ID nur zwei Spalten für "BereicheID" und "SeitenID" enthält, so dass jede Seite auch verschiedenen Bereichen zugeordnet werden kann
Tabelle:
"client_or_site_and_bereiche"
id seitenid bereichid
0 0 1
1 0 2
2 2 0
3 5 3
"bereiche"
id bereich
0 chatclienten
1 boards
2 internetchats
3 ircclienten
"boards"
id seitenname link anmeldungnoetig kostenlos altersbegrenzung
0 nummer1.de ...............................................
"internetchats"
id seitenname link anmeldungnoetig kostenlos altersbregrenzung
0 nummer2.de ...............................................
"chatclienten"
id client version von kann logo link kostenlos
2 ding1 ...............................................
"ircclienten"
id client version von kann logo link kostenlos
4 ding1 ...............................................
-------------
Alles okay so?
Jetzt habe ich allerdings echt keine Ahnung wie die SQL Abfrage aussehen soll.
Wenn ich die z.B. Bewertung von "ding 1" haben will , wie muss die Abfrage lauten, ich habe mich mit Joins auseinander gesetzt aber ich verstehe nicht wie ich sowas hier machen soll..
mfg
Peda
Mahlzeit,
Also ich werd mal genau sagen wie die Tabellen heißen und was drin steht:
Ah, jetzt verstehe ich. Du könntest - im Sinne der Normalisierung - natürlich noch jeweils 2 Tabellen zusammenfassen:
"boards"
id seitenname link anmeldungnoetig kostenlos altersbegrenzung
"internetchats"
id seitenname link anmeldungnoetig kostenlos altersbregrenzung
"seiten"
id seitentyp_id seitenname link anmeldungnoetig kostenlos altersbegrenzung
Dazu noch eine Tabelle:
"seitentypen"
id seitentyp
"chatclienten"
id client version von kann logo link kostenlos
"ircclienten"
id client version von kann logo link kostenlos
"clienten"
id clienttyp_id client version von kann logo link kostenlos
Dazu noch eine Tabelle:
"clienttypen"
id clienttyp
Wenn ich die z.B. Bewertung von "ding 1" haben will , wie muss die Abfrage lauten, ich habe mich mit Joins auseinander gesetzt aber ich verstehe nicht wie ich sowas hier machen soll..
Wie lautet der Rest von Deinen Tabellen konkret? Also die Bewertungstabelle hauptsächlich ...
MfG,
EKKi
Hi.
Wie lautet der Rest von Deinen Tabellen konkret? Also die Bewertungstabelle hauptsächlich ...
Okay du kriegst jetzt genau alles 100% wie ichs hab:
----------------------------------------------------
boards (sid)
id seitenname link anmeldungnoetig kostenlos altersbegrenzung bid
0 seite1.de http nein ja nein 0
internetchats (sid)
id seitenname link anmeldungnoetig kostenlos altersbegrenzung bid
0 seite2.de http ja ja nein 1
chatclienten (sid)
id client von version kann logo link kostenlos bid
0 icq icq 6 nix ht.. htt. ja 2
ircclienten (sid)
id client von version kann logo link kostenlos bid
0 mirc irc 2 viel ht.. htt. nein 3
bereiche (bid)
id bereich
0 boards
1 internetchats
2 chatclienten
3 ircclienten
bew_and_anz (bewid)
id bew bew_anz
0 100 10
1 200 50
2 300 100
3 20 5
client_or_site_and_bereiche
id bid sid bewid
0 0 0 0
1 1 0 2
2 2 0 3
3 3 0 1
So, ich möchte nun von chatclienten id 0 die bewertung wissen!
Wie????
lg
peder (ich verzweifel)
Mahlzeit,
Okay du kriegst jetzt genau alles 100% wie ichs hab:
Ich wiederhole jetzt nicht, dass ich Dein Datenbanklayout für ziemlich unausgereift, fehlerträchtig und kompliziert halte und dass ich nicht in Deiner Haut stecken möchte, was Pflege, Wartung und Erweiterung des Systems angeht ... denn das willst Du anscheinend nicht hören. Naja - wer nicht hören will, muss fühlen ... ich wünsche Dir gute Nerven und viel Erfolg!
So, ich möchte nun von chatclienten id 0 die bewertung wissen!
Wie????
Steh ich auf dem Schlauch? Was ist daran so schwer?
SELECT bew_and_anz.bew / bew_and_anz.bew_anz AS bewertung
FROM bew_and_anz
JOIN client_or_site_and_bereiche ON bew_and_anz.id = client_or_site_and_bereiche.bewid
WHERE client_or_site_and_bereiche.bid = 2
AND client_or_site_and_bereiche.sid = 0
(Gegebenenfalls Aliase usw. einbauen)
MfG,
EKKi
Mahlzeit,
Gibts Verbesserungsvorschläge?
Ja. Wieso hast Du 5 verschiedene Tabellen für (im Prinzip) gleiche Inhalte?
Außer dieser Tabelle
- Tabelle (Seiten-Bereiche)
id bereiche
0 Boards
1 Cooleseiten
2 uncooleseiten
3 tolleseiten
4 untolleseiten
...
brauchst Du für die einzelnen Seiten doch nur eine Tabelle mit den folgenden Feldern:
2. Tabelle (Seiten)
id bereich boards (weitere spalten mit anderen infos)...
0 1 link
1 4 link
2 1 link
3 3 link
...
MfG,
EKKi
Mahlzeit,
Gibts Verbesserungsvorschläge?
Ja. Wieso hast Du 5 verschiedene Tabellen für (im Prinzip) gleiche Inhalte?
Weil ich nach [link=http://forum.de.selfhtml.org/?t=164545&m=1072672]Bios Prinzip[/link] gegangen bin..
http://forum.de.selfhtml.org/?t=164545&m=1072672
Peda
Mahlzeit,
Ja. Wieso hast Du 5 verschiedene Tabellen für (im Prinzip) gleiche Inhalte?
Weil ich nach [link=http://forum.de.selfhtml.org/?t=164545&m=1072672]Bios Prinzip[/link] gegangen bin..
Ähm, nein. Bist Du nicht. Jedenfalls nicht, was "Seiten-Bereiche" und die vielen Tabellen zu den jeweiligen Bereichen angeht.
MfG,
EKKi