Devon (21.07.2014), John Gotti (21.07.2014)
-
21.07.2014, 11:27 #11
AW: Mehrere MySQL Tabellen durchsuchen
Da bin ich gerade am überlegen, ist halt noch alles in der "Testphase". Es sind ja mehrere Charakterklassen und somit mehrere Tabellen. Dann müsste ich diese Daten nur nach den Klassen filtern (wie z.B. hier).
-
21.07.2014, 11:41 #12
- Registriert seit
- 17.07.2014
- Beiträge
- 50
Thanked 26 Times in 16 PostsAW: Mehrere MySQL Tabellen durchsuchen
Du setzt einfach eine weitere Spalte dazu, welches die Klasse der Waffe angibt.
z.B. als ENUMGeändert von BeTwo (21.07.2014 um 11:42 Uhr)
-
21.07.2014, 11:44 #13
- Registriert seit
- 15.11.2011
- Beiträge
- 6.210
- Blog Entries
- 5
Thanked 9.132 Times in 3.006 PostsAW: Mehrere MySQL Tabellen durchsuchen
Das hat mit überlegen und testen nichts zutun, du hast einfach keine vernünftige Datenbankstruktur. Das ist die Grundlage für jedes Projekt und wenn man da anfängt zu murksen passiert das was hier passiert ist, nämlich dass man alles grade noch mal machen kann.
Du hast die dritte Normalform verletzt. Man erstellt in so einem Fall keine 99 Tabellen mit redundanten und inkonsistenten Daten, sondern eine Extra-Tabelle die über einen Fremdschlüssel mit der Waffen-Tabelle verknüpft wird.
Vermute ich zumindestens mal, du geizt hier ja an allen Ecken mit Infos und hast immer noch keine vernünftigen Daten zur Tabellenstruktur gepostet. Außer ein paar Werten ohne Columns, wo man nur raten kann was das für Nummern sein sollen...
-
The Following 2 Users Say Thank You to DMW007 For This Useful Post:
-
21.07.2014, 12:18 #14
- Registriert seit
- 02.01.2013
- Beiträge
- 879
Thanked 458 Times in 313 PostsAW: Mehrere MySQL Tabellen durchsuchen
Was ich nicht verstehe... wenn in den Tabellen Daten zu Waffen enthalten sind, was hat das mit Charakterklassen zu tun?
Wenn es darum geht, daß bestimmte Charakterklassen nur bestimmte Waffen benutzen können, dann ist es nicht sinnvoll, pro Charakterklasse eine Waffentabelle anzulegen... dann würden ja Waffen mehrfach in verschiedenen Tabellen auftauchen, wenn mehrere Charakterklassen sie verwenden können. Das meint DMW007 damit, daß die dritte Normalform verletzt wird. Wieso soll man die Tatsache, daß eine Waffe Durchschlagskraft 35 hat, in Tabelle A UND Tabelle B UND Tabelle C abspeichern, nur weil die Charakterklassen A, B und C sie verwenden können. Dies birgt neben der Redundanz außerdem das Problem, daß inkonsistente Daten entstehen können. Etwa indem man in Tabelle A die Durchschlagskraft der Waffe auf 36 erhöht, weil sie eigentlich so hoch ist, es aber bei Tabellen B und C vergisst. Dann hat ein- und dieselbe die Waffe in der Datenbank zwei verschiedene Werte zur Durchschlagskraft.
Wie auch schon BeTwo und DMW007 andeuteten, wäre eine vernünftiges Design etwa folgendes:
Tabelle Waffen:
==========
Feld1: Name der Waffe
Feld2 bis n: Daten der Waffe
Tabelle Charakterklassen
================
Feld1: Name der Charakterklasse
Feld2 bis n: Daten der Charakterklasse
Tabelle Waffenverwendung
=================
Feld1: Name der Waffe
Feld2: Name der Charakterklasse
Wenn man dann die Waffen herausfinden will, die eine bestimmte Charakterklasse verwenden kann, setzt man folgendes SQL ab:
Select Feld1 from Waffenverwendung where Feld2 = "Charakterklasse, um die es geht";
oder, wenn man gleich schon alle Waffendaten wissen will:
Select * from Waffen, Waffenverwendung where Waffen.Feld1 = Waffenverwendung.Feld1 and Waffenverwendung.Feld2 = "Charakterklasse, um die es geht";Geändert von freulein (21.07.2014 um 12:20 Uhr)
-
The Following User Says Thank You to freulein For This Useful Post:
John Gotti (21.07.2014)
-
21.07.2014, 12:26 #15
- Registriert seit
- 17.07.2014
- Beiträge
- 50
Thanked 26 Times in 16 PostsAW: Mehrere MySQL Tabellen durchsuchen
SELECT * FROM Waffen WHERE EXISTS(SELECT * FROM Waffenverwendung WHERE Waffen.name = Waffenverwendung.name AND Waffenverwendung.klassenname = 'Engineer')
wäre der Sinniger Query. Zumindest von der Denkweise her.Geändert von BeTwo (21.07.2014 um 12:28 Uhr)
-
21.07.2014, 13:50 #16
AW: Mehrere MySQL Tabellen durchsuchen
Subquerys sind teilweise ineffizienter (suboptimal halt, sagt ja schon der Name ).
Ich würde daher Joins bevorzugen. Schwerer oder unlogischer sind sie auch nicht, wenn man verstanden hat wie sie funktionieren. Das sind aber eh Grundlagen, die man als Entwickler der mit SQL zutun hat können sollte. Natürlich hängt es von der Effizienz des DMBS ab. Subquerys werden heute besser erkannt und z.B. vom Mysql-Parser teils ähnlich performant wie Joins abgearbeitet. Dann gibt es auch noch den Fall wo Subquery und Join gleichauf liegen.
Wenn man Subquerys benutzt sollte man aber vorsichtig sein. Besonders wenn man etwas in die Datenbank schreibt. Da kann man sich sonst böse Fallstricken basteln die z.B. zu unnötig langen Tabellensperren führen können.
-
21.07.2014, 13:55 #17
- Registriert seit
- 17.07.2014
- Beiträge
- 50
Thanked 26 Times in 16 PostsAW: Mehrere MySQL Tabellen durchsuchen
John Gotti wie du richtig gesagt hast, sind die Zeiten vorbei, wo die so unperformant sind. Gerade wenn man die Indexes richtig setzt sind die nahezu gleich schnell wie ein Join, in manchen Fällen sogar schneller.
Das Join schwerer oder unlogischer ist, habe ich nie behauptet. Ich bevorzuge Joins - aber hier musst du von einem Noob in SQL ausgehen. Und daist die Subquery Variante einfacher nachvollziehen, da sie näher an unserer Sprache liegt.
Hole alle Daten von Waffen, die Klasse XYZ benutzen kann.
Ähnliche Themen
-
SQL-Statement Tabellen joinen
Von Saad im Forum WebentwicklungAntworten: 7Letzter Beitrag: 18.04.2014, 09:48 -
Xampp Service mysql is not installed Service mysql is not started
Von Essah im Forum WebentwicklungAntworten: 8Letzter Beitrag: 22.03.2014, 22:57 -
[HTML Tutorial] #5 - Tabellen
Von Comu im Forum HTMLAntworten: 0Letzter Beitrag: 26.07.2012, 17:39 -
Dürfen Polizisten meine Tasche durchsuchen?
Von Swifty im Forum RealLifeAntworten: 14Letzter Beitrag: 27.01.2012, 22:10
Diese Seite nutzt Cookies, um das Nutzererlebnis zu verbessern. Klicken Sie hier, um das Cookie-Tracking zu deaktivieren.