Register for your free account! | Forgot your password?

You last visited: Today at 09:07

  • Please register to post and access all features, it's quick, easy and FREE!

 

How to SQL

Reply
 
Old   #1
 
elite*gold: 0
Join Date: Jun 2011
Posts: 484
Received Thanks: 11
Post How to SQL

SQL-Anleitung für ArcEmu WoW Server
Dann will ich euch mal ein bisschen auf die Sprünge helfen^^
Mit dieser Anleitung könnt ihr eure Bugs auf den Servern beheben oder Sql für andere Dinge nutzen. Diese Anleitung jedoch bezieht sich hauptsächlich auf eure WoW-Server und deren Db´s.
Diese Anleitung ist die Erste dieser Art und darf nicht ohne meine Erlaubnis kopiert oder veröffentlicht werden.

Inhalte:
1. Was brauche ich?
2. Was nun damit anfangen?
3.1 Das Verstehen der Standarts und der Querry´s
3.2 Der SELECT-Befehl
3.2.1 Aufbau des SELECT-Befehls
3.2.2 Alle Infos sofort
3.3 WHERE-Querry´s
4.1 Der INSERT-Befehl
4.1.1 INSERT INTO
4.1.2 Die `column` Values Querry
4.2 UPDATE-Befehle
4.2.1 Update, SET und WHERE
5.1 Der DELETE-Befehl
5.1.1 Einsatz des DELETE-BEfehls

1. Was Brauche ich?

Visual Studio 2010 Packet:
Download: Microsoft Visual Studio*2010 Service Pack 1 (Installationsprogramm) - Microsoft Download Center - Download Details
(Hiervon installiert ihr Visual Studio c++ Express Edition, es enthält .Net Framework)

Xampp:


Navicat:


HeidiSql:


SqlYog:


ArcEmu Datenbank:


Notepad(++):



2. Was nun damit anfangen?

Nun müsst ihr alles, was ihr gedownloadet habt installieren und konfigurieren.
Wenn ihr alles Installiert habt, können wir zum nächsten Punkt übergehen.


3.1 Das Verstehen der Standarts und der Querry´s

Ihr alle habt nun eine Datenbank Installiert, aber habt ihr auch verstanden, was ihr da Installiert habt und wie? Ich denke nicht^^ Aber dafür ist ja diese Anleitung da.
Als erstes öffnen wir eine einfach strukturierte Tabelle. Ich denke da an die Tabelle "vendors". Ich mache dies alles mit Navicat. Rechtsklickt die Tabelle Vendors und klickt im
Kontextmenü auf "Tabelle öffnen". Nun sollte sich ein Tab öffnen, der die Tabelle und deren Spalten namens "entry, item, amount, max_amount und inctime" anzeigt. Ich werde nun erstmal diese Spalten erklären.

entry: ID des Verkäufers
item: ID des Items, dass er verkaufen soll
amount: Anzahl der Items, die verkauft werden sollen
max_amount: Maximale Anzahl der Items, die verkauft werden sollen (unwichtig für Anfänger, standartmäßig ist sie 0)
inctime: Auch unwichtig für Anfänger (standartmäßig auch 0)

In dieser Tabelle ist das alles noch sehr leicht zu Verstehen, aber wir werden uns schon bald mit Tabellen wie "creature_proto" befassen. Dann wird es viel schwerer.


3.2 Der SELECT-Befehl

Dieser Befehl ist der einfachste Befehl aus dem großen Arsenal der Befehle. Mit ihm könnt ihr Daten aus den Tabellen auslesen, ohne sie erst lange im Browser suchen zu müssen.
Man verändert nichts, sondern liest nur etwas aus den Tabellen. Also keine Angst^^


3.2.1 Aufbau des SELECT-Befehls

Er ist eigentlich grundsätzlich aus dem Befehl SELECT FROM und der Angabe WHERE aufgebaut.
Genau wie alle anderen Querry´s endet auch diese mit einem ";". Er bezeichnet das Ende einer Querry.
Um eine Querry auszuführen, musst du auf deine DB Rechtsklicken und im Kontextmenü die Option Konsole/Console auswählen.
Nun könnt ihr die Querry eingeben.
Normalerweise sieht eine SELECT-Querry so aus:

Code:
SELECT `colum_name1` FROM `table_name` WHERE `column_nameX`= 'value';
Auch das sieht für Anfänger wohl noch etwas komisch aus, erklärt sich aber gleich. Wir nehmen den Händler "Corina Steele" als Beispiel. Ihre ID ist 54.
Die Querry für die Tabelle "vendors", sollte so aussehen:

Code:
SELECT `item` FROM `vendors` WHERE `entry` = '54';

Wenn ihr dies in euer Sql-Programm eingebt und ausführt, werden euch alle ItemID´s angezeigt, die von Corina verkauft werden.
Man kann auch mehrere Informationen auf einmal abrufen. Das sieht dann so aus:

Code:
SELECT `colum_name1`, `column_name2` FROM `table_name` WHERE `column_nameX`= 'value';

Unser nächster Befehl wird also 2 Infos auslesen. Bei uns die Infos aus der Spalte "item" und aus der Spalte "amount".

Code:
SELECT `item`, `amount` FROM `vendors` WHERE `entry` = '54';

Nun werden euch die Daten der beiden Spalten angezeigt.


3.2.2 Alle Infos sofort

Du kannst auch direkt die Infos aus allen Spalten auslesen, was aber bei großen Datenmengen lange dauern kann.
Die Querry dafür lautet:

Code:
SELECT * FROM `table_name` WHERE `column_nameX`= 'value';

oder in unserem Fall:

Code:
SELECT * FROM `vendors` WHERE `entry` = '54';

Nun werden euch alle Daten dieses Händlers angezeigt.


3.3 WHERE-Querry´s

Der WHERE-Befehl ist schon fast nicht mehr Wegzudenken und sehr wichtig. Auch er verändert nichts, sondern liest nur.
Doch, wenn du einen DELETE-Befehl ausführen willst, musst du einen WHERE-Befehl hinzunehmen, da du sonst alles in dieser Tabelle löschst.
Als Hilfe kommt nun auch der "AND-Ausdruck" dazu.
Aussehen sollte die Querry so:

Code:
SELECT * FROM `table_name` WHERE `column_nameX`= 'valuex' AND `column_nameY`= 'valueY';

Nun nehmen wir uns mal die "amounts" vor. Das ist, wie ihr ja wisst, die Anzahl der verkauften Items (Stacks bei Pfeilen usw.).

Code:
SELECT * FROM `vendors` WHERE `entry` = '54' AND `amount` = '1';

Nun werden euch alle verkauften Items angezeigt, die einzelnd verkauft werden.
Man kann natürlich jede beliebige Menge angeben, wie z.B. 200 bei Pfeilen.

Code:
SELECT * FROM `vendors` WHERE `entry` = '54' AND `amount` = '200';

(Bei diesem Befehl wird eine Nachricht mit dem Titel "Empty Set" erscheinen, da dieser Händler nur einzelnde Items verkauft.)

Vllt aber wollen wir nicht nur Wissen was dieser eine Verkäufer verkauft, sondern auch alle anderen mit Stacks von X(In unserem Fall 200).
Dafür einfach AND durch OR ersetzen und los gehts:

Code:
SELECT * FROM `vendors` WHERE `entry` = '54' OR `amount` = '200';

Nun werden dir alle ItemID´s von unserer ID 54 und aller Verkäufer mit 200er Stacks angezeigt.

Das wars dann mit dem SELECT-Befehl. Ihr beherscht ihn nun (theoretisch:-P)


4.1 Der INSERT-Befehl

Mit dem INSERT-Befehl, lassen sich neue Spalten in deinen existiernden Tabllen erstellen.So kannst du z.B. neue NPC´s oder Items erstellen, sowie Npc´s zu Verkäufern machen, was wir nun einfach mal machen werden.


4.1.1 INSERT INTO

Die einfachste Art des INSERT-Befehls, ist der INSERT INTO-Befehl. Damit erstellt man einfache Spalten in bestehenden Tabellen.
Wir bearbeiten nun den Erzbischof () so,dass er dieses Item verkauft . Dazu benutzen wir erstmal den INSERT-Befehl, um ihm einen Eintrag in der "vendors"-Tabelle zu erstellen.
Die Querry sieht im allgemeinen so aus:

Code:
INSERT INTO `table_name` VALUES ('v1', 'v2', 'v3', ....., 'vX');

Was bei uns entspricht:

Code:
INSERT INTO `vendors` VALUES ('1284', '33034', '1');

Wenn du diese Querry einspielen würdest, würde ein neuer Eintrag in der Tabelle "vendors" für diese ID entstehen (Ihr könnt dies gerne tun, da wir nachher alles wieder rückgängig machen).
Wie du siehst, ist der INSERT INTO-Befehl einer der einfachsten Befehle überhaupt. Doch so einfach ist er nun doch nicht:-P
Er hat einige Nachteile. Wenn jetzt z.B. 20 INSERT INTO fertig sind, und eine neue Spalte in die Tabelle geaddet wird, sind die Querry´s nutzlos, außer man addet die neue Spalte in die Querry.
Der entstehende Error sieht dann so aus:

Code:
/* SQL Error: Column count doesn't match value count at row 1 */

Du siehst also:

Gute Seite: Sehr einfache Bedienung und Umsetzung
Schlechte Seite: Anfällig für Spaltenänderungen und dortige Fehler


4.1.2 Die `column` Values Querry

Eine andere Möglichkeit für den INSERT-Befehl, ist es die genauen Spalten anzugeben, in die, die Infos geaddet werden sollen.
Na das sieht doch schonmal nach richtiger Arbeit aus^^:

Code:
INSERT INTO `table_name` (`column_name1`, `column_name2`, `column_name3`,....., `column_nameX) VALUES ('v1', 'v2', 'v3', ....., 'vX');

Umgebaut für unseren Verkäuferbischof^^:

Code:
INSERT INTO `vendors` (entry, item, amount, max_amount, inctime) VALUES (1284,33034,1,0,0);

Und fertig ist eine Querry mit dem gleichen Ergebnis, die aber leichter an einen Strukturwechsel anzupassen ist.

Gute Seite: Spaltenänderungen sind kein Problem mehr
Schlechte Seite: Dauert einfach länger es zu Schreiben:-P

4.2 UPDATE-Befehle

Mit UPDATE-Befehlen, kann man alles mögliche, auf einfachste Weise anpassen und berichtigen.

Gute Seite: Ihr könnt alles sofort berichtigen und fixen
Schlechte Seite: Gibt keine:-P

4.2.1 Update, SET und WHERE

Aufgebaut ist der UPDATE-Befehl, fast wie der SELECT-Befehl. Er basiert auch auf der gleichen Grundlage.
Aussehen tut er dann so:

Code:
UPDATE `table_name` SET `column_name` = 'value' WHERE `column_nameX` = 'valueX';

Nun zurück zu unserem Bischof^^ Wir haben ja schon seinen Eintrag in der "vendors"-Tabelle erstellt.
Dies nützt uns so aber wenig bis nichts:-). Wir müssen ihn erstmal als Verkäufer Flaggen. Dazu benutzen wir einen UPDATE-Befehl.
Dies geht so:

Code:
UPDATE `creature_proto` SET `npcflags` = '128' WHERE `entry` = '1284';

Nun ist der gute alte Bischof ein Verkäufer und handelt mit gutem Schnaps^^
So einen könnt ihr euch nun auch gönnen^^ Ihr könnt nun fast alles, was ihr können müsst^^

5.1 Der DELETE-Befehl

Dies ist der machtvollste Befehl der ganzen Anleitung. Wenn er falsch angewendet wird, kann er ganze Tabellen zerstören.
Er ist auch mit einem WHERE-Befehl gekoppelt und dieser ist hier besonders wichtig.

5.1.1 Einsatz des DELETE-BEfehls

Auch der Einsatz des DELETE-Befehls ist nicht schwer und gleicht dem INSERT-Befehl auf Haar.
Er sieht normalerweise so aus:

Code:
DELETE FROM `table_name` WHERE `column_nameX` = 'ValueX';

Da unser Alkibischof ja nicht Blizzlike ist, werden wir ihn doch gleich mal Fixen, oda wie siehst du das^^
Das geht, indem wir erstmal den eintrag in der "vendors" Tabelle löschen.

Code:
DELETE FROM `vendors` WHERE `entry` = '1284';

(Außerdem müsst ihr noch schnell die Flags wieder ändern:-P
Dies geht auch mit einer UPDATE-Querry:

Code:
UPDATE `creature_proto` SET `npcflags` = '2' WHERE `entry` = '1284';
Nun ist deine DB wieder so wie sie am Anfang war, du aber weißt eine ganze Menge mehr^^)

GLÜCKWUNSCH. HIERMIT BEHERSCHT IHR ALLES WAS IHR FÜR EINEN GUTEN WOW-SERVER BRAUCHT.



Korlar is offline  
Thanks
1 User
Old   #2
 
elite*gold: 0
Join Date: Aug 2012
Posts: 10
Received Thanks: 2
Verdammt ich könnte schwören, das selbe Teil vor circa 2 Jahren schon mal gelesen zu haben Mister Unique. Aber da es ja einmalig und von dir ist war ich sicher nur betrunken


Besidas is offline  
Old   #3
 
elite*gold: 0
Join Date: Jun 2011
Posts: 484
Received Thanks: 11
Das Alte ist auch von mir Ich bin Th3_L0st von damals
Korlar is offline  
Old   #4
 
elite*gold: 0
Join Date: Aug 2012
Posts: 10
Received Thanks: 2
Ach du kacke du lebst noch O:


Besidas is offline  
Old   #5
 
elite*gold: 0
Join Date: Jun 2011
Posts: 484
Received Thanks: 11
Ja Ich lebe noch Aber is auch mal nett, dass mich überhaupt noch jemand kennt


Korlar is offline  
Reply



« Previous Thread | Next Thread »



All times are GMT +2. The time now is 09:07.


Powered by vBulletin®
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Abuse
Copyright ©2017 elitepvpers All Rights Reserved.