OrangeVirus
https://www.orangevirus.eu/community/

SQL Tutorial (2)
https://www.orangevirus.eu/community/viewtopic.php?f=14&t=15062
Seite 1 von 1

Autor:  Carsten [ So 31. Okt 2010, 16:40 ]
Betreff des Beitrags:  SQL Tutorial (2)

So,

Vorab: Die Farben benutze ich, um euch die Zusammenhänge klar zu machen. Wenn euch die Farbe stört, kopiert den Text in einen Texteditor und lest es euch da durch!


Teil 2 des SQL Tutorials. Heute werden wir prüfen, ob ihr alles, was ihr bei Teil 1 durchgelesen, auch behalten habt. Gleichzeitig lernen wir, wie man eine neue Datenbank erstellt und dort Einträge einfügt.
Das heißt, erstmal brauchen wir eine Datenbank. Wir auf OV arbeiten mit MySQL. Man könnte sich MySQL so runterladen, wir benutzen aber XAMPP. Das beinhaltet Pakete (Apache, MySQL, PHP und Perl). Diese werden auf einfachste Art und Weise installiert. Ihr downloadet euch erstmal XAMPP für euer Betriebssystem, die Lite-Version reicht vollkommen aus.


Auf den jeweiligen Seiten wird euch gezeigt, wie man XAMPP auf eurem Betriebssystem installiert. Einfach das Script durchlaufen lassen.
Wenn ihr das gemacht habt, könnt ihr das XAMPP-Control Panel starten. Wenn dies nicht klappt (als Win7 / Vista Nutzer) einfach mal mit Administratorionsrechten probieren.
Wenn ihr das XAMPP-Control Panel auf eurem Desktop habt, dann startet Apache und MySQL. Funktioniert MySQL nicht, einfach mal Skype schließen. Erneut euf Start drücken, dann sollte es funktionieren. Wenn es läuft, könnt ihr auch Skype wieder problemlos starten.
Dann braucht ihr ein Passwort für den root-User (Standart User) für euren SQL-Server. Ihr gebt dazu in eurem beliebig gewählten Explorer 'localhost' ein. Geht links auf 'Sicherheitscheck' und dann auf den Link für das Setzen des MySQL Root-Passworts. Ihr lasst das alte Passwortfeld leer und gebt einfach ein neues ein. Rest lassen und auf Passwort ändern klicken.
So, dann haben wir das schonmal.
Wenn ihr jetzt auf 'localhost/phpmyadmin' geht, öffnet sich ein Fenster. Dort gebt ihr bei Benutzername 'root' ein und bei Passwort das von euch eben gewählte Passwort.
Ihr seht jetzt links eine Spalte, wo folgende Datenbanken schon vorhanden sind:

  • informations_schema
  • MySQL
  • phpmyadmin

Daran verändern wir nichts!

Zunächst legen wir eine neue Datenbank an, wo wir dran rumfuchteln können, wie wir lustig sind. Wir nennen sie 'blubb' (es ist ja eh nur ein Beispiel).
Um eine neue Datenbank zu erstellen, brauchen wir den CREATE DATABASE Befehl. Wie der Name bereits sagt, legen wir damit eine neue Datenbank an. Der Befehl ist aber so noch nicht vollständig. Es muss noch die Zeichenkodierung der Datenbank anlegen. Wir benutzen hier die UTF8 Zeichenkodierung, dies ist der Standard normalerweise. Um diesen festzulegen, erweitern wir jetzt den CREATE DATABASE-Befehl um DEFAULT CHARACTER SET und um COLLATE. Wenn wir das jetzt zusammenschreiben würden, käme folgendes raus:

CREATE DATABASE `blubb` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

Näher will ich darauf jetzt auch nicht eingehen, ihr werdet es später nicht mehr gebrauchen ;).
Wenn ihr jetzt auf localhost/phpmyadmin geht und euch einloggt, steht oben ein Reiter 'SQL'. Dort schreibt ihr die oben vorliegenden SQL-Query rein. Jetzt habt ihr eine leere Datenbank vorliegen.

Jetzt klären wir erst nochmal, was eine Tabelle. Ich zitiere das von http://www.1keydata.com/sql/sql.html , weil es dort verständlich erklärt ist:
Tabellen sind in Zeilen und Spalten aufgeteilt. Jede Zeile entspricht einem Datenbestandteil und jede Spalte lässt sich als Entsprechung einer Komponente dieses Datenbestandteils vorstellen. Bei einer Tabelle für Kundendaten könnten die Spalten beispielsweise Informationen wie Vorname, Nachname, Straße, Wohnort, Land, Geburtsdatum usw. enthalten. Bei der Definition einer Tabelle, geben wir dementsprechend die Spaltenkopfzeilen und die Datentypen für die jeweilige Spalte an.

Jede Spalte bekommt einen bestimmten Datentyp zugewiesen. Was das ist? Das zitier ich wieder von http://www.1keydata.com/sql/sql.html .
Im Allgemeinen liegen Daten in verschiedenen Formen und Formaten vor. Dies kann eine Ganzzahl (wie 1), eine reelle Zahl (wie 0,55), eine Zeichenkette (wie 'sql'), ein Datums-/Zeitausdruck (wie '2000-JAN-25 03:22:22') oder sogar ein binäres Format sein. Wenn wir eine Tabelle definieren, müssen wir für jede Spalte den zugehörigen Datentyp angeben (z.B. für 'Vorname' den Typ char(50), also einen aus 50 Zeichen bestehenden String). Dabei ist zu beachten, dass verschiedene Datenbänke unterschiedliche Datentypen erlauben, weshalb zunächst eine Datenbank spezifische Referenz in Anspruch genommen werden sollte.

Man erzeugt eine neue Tabelle mit dem CREATE TABLE Befehl. Wie der Name sagt, kreieren wir eine neue Tabelle. Die Syntax dafür ist relativ simpel.

CREATE TABLE `Tabellenname`
(Spaltenname1 Datentyp_für_Spalte_1,
Spaltenname2 Datentyp_für_Spalte_2...);

Dies kann man natürlich beliebig fortsetzen. Für unsere Datenbank 'blubb' erstellen wir jetzt eine Tabelle 'Personen', wo wir 5 Spalten haben möchten, jede Spalte soll einen Datentyp, damit man 25 Zeichen dort reinschreiben kann. Die Spaltennamen sollen heißen:

  • Name
  • Alter
  • Geburtsort
  • Wohnort
  • Arbeitsort

Mehr brauchen wir gar nicht ;)
Und das ist eure erste Aufgabe: Erstellt diese Tabelle.

__________________________________________________________________________

So,
jetzt haben wir den Großteil schonmal geschafft von diesem Teil des Tutorials. Jetzt möchten wir diese Tabelle natürlich füttern. Womit? Mit Daten. Dafür brauchen wir den INSERT INTO Befehl. Die Syntax von diesem Befehl ähnelt dem CREATE TABLE Befehl. Wir brauchen für den INSERT INTO Befehl den Tabellennamen, die Spaltennamen und wir müssen wissen, was in die jeweiligen Spalten eingefügt werden soll.
Die komplette Syntax lautet:

INSERT INTO `Tabellenname` ("Spaltenname1", "Spaltenname2", ...) VALUES ("Wert_von_Spaltenname1, "Wert_von_Spaltenname2", ...);

Hier gehört "Spaltenname1" zu "Wert_von_Spaltenname1" & "Spaltenname2" zu "Wert_von_Spaltenname2" usw.
Wenn ihr einen Wert zu einer Spalte vergessen habt, dann wird euch phpMyAdmin einen Fehler ausgeben.
Zu eurer zweiten Aufgabe: Füllt die Tabelle 'Personen' mit Daten. Ihr könnt dort ruhig mehr Personen angeben, eine würde aber ausreichen.

Wenn ihr das geschafft habt, sind wir schon fast durch mit dem zweiten Teil des Tutorials. Ihr müsst mir dann nurnoch eine PN schicken, ich geb euch dann noch eine Kontrollaufgabe ;)


Und bis zum nächsten Mal!


Ps.:
Bei Fragen, Anregungen oder Kritik -> schickt mir eine PN ;)

Autor:  FeRkEl [ Mo 27. Dez 2010, 21:08 ]
Betreff des Beitrags:  Re: SQL Tutorial (2)

gibt es Interesse an weitern SQL tutorials ?
wenn ja am besten hier Antworten in welchem Context sie sein sollten ( müsste mir die bisherigen erstmal durchlesen, glaube aber das grundlagen schon erklärt wurden)

MfG

Autor:  johnash [ Di 28. Dez 2010, 00:43 ]
Betreff des Beitrags:  Re: SQL Tutorial (2)

hmm also ich wär Interessiert an ein paar fortgeschrittenen Beispielen, die besonders auf den WoW-Server eingehen, wie z.B. Heroic Loot: http://mantis.orangevir.us/view.php?id=3492
Spoiler: show
hab bisher nur rausgekriegt, dass unter Mangos iwie alle mobs für Heros nen zweiten Eintrag im creature_template, loot etc. bekommen(weils nicht wie bei trinity heroicentry gibt), und frag mich, ob ich da noch iwie ohne aufgesetzten Server rauskriegen kann, was für entrys da für Hero loot verändert werden müssen...
oder Mobs(areatriggerhttp://mantis.orangevir.us/view.php?id=3497) Spawnen via SQL Query: http://mantis.orangevir.us/view.php?id=3488(dazu passend vllt ne GUID-Einführung) ;)

Autor:  pasdVn [ Do 30. Dez 2010, 12:01 ]
Betreff des Beitrags:  Re: SQL Tutorial (2)

Bin schreibfaul... also nur kurz zwei Hinweise:

Richtige Areatrigger sendet nur der Client. Die sind irgendwie in den Maps drin, kann man also nicht via SQL-DB Spawnen. Das was bei dem Quest den du meinst fehlt ist warscheinlich eher ein "Spellfocus", was nichts anderes ist als ne extra Nummer, die ein GO haben muss, damit ein Zauber innerhalb eines bestimmten Radius dieses GO's gecastet werden kann. Manchmal wird sowas auch über script targets gemacht. Da ist sich lbizz auch nicht immer ganz einfach.

GUID's werden soviel ich weiß nicht nach einem festen Prinzip vergeben (zumindest bei der UDB) sondern sind einfach ne laufende Nummer (sprich Feld leer lassen bei der Query).
Für unseren custom-Stuff haben wir ein extra Vergabesystem, sodass verschiedene DEV's nicht dieselben GUID's benutzen.

Heroloot sollte eigentlich im UDB Wiki ganz gut erklärt sein oder? Weiß ich zumindest jetzt auch nciht aus dem ff.

Autor:  johnash [ Do 30. Dez 2010, 17:13 ]
Betreff des Beitrags:  Re: SQL Tutorial (2)

hab bisher nur http://www.ac-web.org/forums/showthread.php?t=64082 gefunden bzgl Hero loot

und UDB Wiki steht auch nur:
Code:
 heroic_entry

If not zero, this field refers to an entry of creature_template. If a creature spawned in an heroic instance has the template, it will get the template pointed by this field instead.

also, dass es zwei verschiedene Einträge für nen Mob gibt, jenachdem, ob der mob Hero oder normal ist (Beim hero mob wird da dann 0 stehen, oder?) und die Frage bleibt dann immernoch, obs ein bestimmtes System gibt, mit dem man ohne DB herausfinden kann, wie die ID vom Hero Mob ist...

Autor:  pasdVn [ Fr 31. Dez 2010, 10:19 ]
Betreff des Beitrags:  Re: SQL Tutorial (2)

Ah, jetzt verstehe ich.

Kann ich dir allerdings auch nicht sagen. Ich denke mal eher nein (also es gibt kein System, sondern nur zufällig freie Id's), sonst hätten die Trinity-Leuts da wohl nix dran geändert (wie du sagst), wenn das so also blizzlike wäre.

Autor:  FeRkEl [ Sa 1. Jan 2011, 15:43 ]
Betreff des Beitrags:  Re: SQL Tutorial (2)

hmm GUID ( Global Unique Identifier ) ist ein im ganzen Spiel eindeutig Nummer. Es kann nicht vorkommen das ein Gameobject und ein Creature ( NPC/MOB) die selbe GUID haben.
Dazu wird die GUID in 2 bereiche unterteilt, LowGuid und HighGuid, in der datenbank wird meines wissens nur der part von LOW guid gespeichert, der High ergibt sich automatisch von der "tabel" in der sie steht, also haben alle gameobjects die selbe HighGuid und unterschiedliche LowGuid's

die Guid kann somit "frei" gewählt werden, darf aber nicht doppelt vorkommen.

MfG

Seite 1 von 1 Zeitzone: Europa/Berlin
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/