anpera.net

anpera.net

experimental server @home
Aktuelle Zeit: Di 10 Jun, 2025 23:11

Alle Zeiten sind UTC + 1 Stunde




Ein neues Thema erstellen Auf das Thema antworten  [ 6 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Wie sollte die SQL korrekt lauten?
BeitragVerfasst: Di 29 Aug, 2006 18:43 
Offline
Großmeister
Großmeister
Benutzeravatar

Registriert: Fr 06 Jan, 2006 01:33
Beiträge: 459
Wohnort: Simmern
Geschlecht: Männlich
LoGD: http://www.morpheus-lotgd.de
Auf Anregung eines Admins hier hab ich gesternNacht mal folgends Programm zusammen geschustert, um die Mondphasen im Spiel an zu geben. Was die SQL betrifft, hab ich jedoch allerschwerste Zweifel, ob sie so korrrekt ist.
Würde bitte mal jemand, der etwas davon versteht, einenBlick darauf werfenund mir saegen, ob der SQL Teil so richtig ist und wenn nicht, wie er lauten muß? Ich wäre sehr dankbar dafür, denn ich betrette damit Neuland...
In der PHP My Admin unter SQL ausführen:

$this->bbcode_second_pass_code('', '

CREATE TABLE `monde` (
`mondnr` int( 10 ) unsigned NOT NULL auto_increment,
`mondname` varchar(50) unsigned NOT NULL default '',
`zyklus` int( 10 ) unsigned NOT NULL default '0',
PRIMARY KEY ( `mondnr` )
) TYPE = MYISAM ;
')

Dann gib den Monden Namen, als Beispile siehst Du hier Erkan und Stefan, überleg Dir Mondzyklen (Tage, die der Mond benötigt, um einmal um den Planeten zu wandern, hier hab ich 32 und 40 genommen) und führe dann aus
$this->bbcode_second_pass_code('', '

"INSERT INTO mond (mondname, zyklus) VALUES ('erkan', '32')";
"INSERT INTO mond (mondname, zyklus) VALUES ('stefan', '40')";
')

In der setnewday, z.B. hinter vendor:
$this->bbcode_second_pass_code('', '


//Mondphasen by Morpheus
$sql = "SELECT * FROM monde WHERE mondnr='zyklus'";
$result = db_query($sql);
$row = db_fetch_assoc($result);
$mz1=$row[erkan];
$mz2=$row[stefan];
$p1=kaum zu sehen;
$p2=sichelförmig und zunehmend;
$p3=halb und zunehmend;
$p4=fast voll und zunehmend;
$p5=voll;
$p6=fast voll und abnehmend;
$p7=halb und abnehmend;
$p8=sichelförmig und abnehmend;
if ($mz1==32){
$sql = "UPDATE monde SET zyklus= \""0"\" WHERE mondnr=''";
db_query($sql);
}else{
$newm=($row[zyklus]+1);
$sql = "UPDATE monde SET zyklus= \"".$newm."\" WHERE mondnr=''";
db_query($sql);
}
if ($mz2==40){
$sql = "UPDATE monde SET zyklus= \""0"\" WHERE mondnr=''";
db_query($sql);
}else{
$newm=($row[zyklus]+1);
$sql = "UPDATE monde SET zyklus= \"".$newm."\" WHERE mondnr=''";
db_query($sql);
}
if ($mz1<5){
$mo=$p1;
}elseif (($mz1>=5) && ($mz1<9)){
$mo=$p2;
}elseif (($mz1>=9) && ($mz1<13)){
$mo=$p3;
}elseif (($mz1>=13) && ($mz1<17)){
$mo=$p4;
}elseif (($mz1>=17) && ($mz1<21)){
$mo=$p5;
}elseif (($mz1>=21) && ($mz1<25)){
$mo=$p6;
}elseif (($mz1>=25) && ($mz1<29)){
$mo=$p7;
}elseif (($mz1>=29) && ($mz1<33)){
$mo=$p8;
}
savesetting("erk",$mo);
if ($mz2<6){
$mo1=$p1;
}elseif (($mz2>=6) && ($mz1<11)){
$mo1=$p2;
}elseif (($mz2>=11) && ($mz1<16)){
$mo1=$p3;
}elseif (($mz2>=16) && ($mz1<21)){
$mo1=$p4;
}elseif (($mz2>=21) && ($mz1<26)){
$mo1=$p5;
}elseif (($mz2>=26) && ($mz1<31)){
$mo1=$p6;
}elseif (($mz2>=31) && ($mz1<36)){
$mo1=$p7;
}elseif (($mz2>=36) && ($mz1<41)){
$mo1=$p8;
}
savesetting("stef",$mo1);
//Mondphasen Ende
')

und schließlich in der newday.php suche

$this->bbcode_second_pass_code('', '

output("`2`nDer Schmerz in deinen wetterfühligen Knochen sagt dir das heutige Wetter: `^".$settings['weather']."`2`n");
')

füge danach ein:
$this->bbcode_second_pass_code('', '

//Mondphasen by Morpheus
output("`2`nAm Himmel sind die 2 Monde, Erkan und Stefan zu sehen. Erkan ist `^".$settings['erk']."`2, Stefan ist `^".$settings['stef']."`2`n");
//Mondphasen Ende
')

_________________
Ich bin das Land, meine Augen sind der Himmel, meine Glieder die Bäume, ich bin der Fels, die Wassertiefe. Ich bin nicht hier, um die Natur zu beherrschen oder sie auszubeuten. Ich bin selbst Natur.

(Hopi)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi 30 Aug, 2006 00:02 
Offline
Held
Held
Benutzeravatar

Registriert: Di 23 Aug, 2005 23:46
Beiträge: 268
Wohnort: Köln
LoGD: http://www.dragnir.de
Deine SQLs sehen für mich auf den ersten Blick ganz gut aus, bis auf wenige Kleinigkeiten:

1. Ändere
$this->bbcode_second_pass_code('', '`mondname` varchar(50) unsigned NOT NULL default '',')
in
$this->bbcode_second_pass_code('', '`mondname` varchar(50) NOT NULL default '',')

unsigned heisst ohne Vorzeichen, was bei Zeichenketten wenig Sinn macht, und einen Fehler verursacht.

2. Das
$this->bbcode_second_pass_code('', 'TYPE = MYISAM')
kannst du dir eigentlich sparen, da dann einfach der Standard-Tabellentyp verwendet wird (also in den meissten Fällen wohl auch MYISAM), aber wirklich stören tut es auch nicht.

3. Du solltest dich entscheiden, ob du deine Tabelle jetzt "monde"
$this->bbcode_second_pass_code('', 'CREATE TABLE `monde` ( ')
oder "mond"
$this->bbcode_second_pass_code('', 'INSERT INTO mond...')
nennen willst ;)

_________________
Warum UNIX/Linux böse ist:

- 'kill' macht Menschen zu brutalen, blutrünstigen Bestien
- 'killall' züchtet regelrecht Massenmörder
- 'whoami' löst bei psychisch labilen Personen Existenzkrisen aus!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi 30 Aug, 2006 00:25 
Offline
Großmeister
Großmeister
Benutzeravatar

Registriert: Fr 06 Jan, 2006 01:33
Beiträge: 459
Wohnort: Simmern
Geschlecht: Männlich
LoGD: http://www.morpheus-lotgd.de
Lestat hat geschrieben:
Deine SQLs sehen für mich auf den ersten Blick ganz gut aus, bis auf wenige Kleinigkeiten:

1. Ändere
$this->bbcode_second_pass_code('', '`mondname` varchar(50) unsigned NOT NULL default '',')
in
$this->bbcode_second_pass_code('', '`mondname` varchar(50) NOT NULL default '',')

unsigned heisst ohne Vorzeichen, was bei Zeichenketten wenig Sinn macht, und einen Fehler verursacht.

Und wieder was gelernt, danke :)
Zitat:
2. Das
$this->bbcode_second_pass_code('', 'TYPE = MYISAM ')
kannst du dir eigentlich sparen, da dann einfach der Standard-Tabellentyp verwendet wird (also in den meissten Fällen wohl auch MYISAM), aber wirklich stören tut es auch nicht.

Ahja, danke, ich hab es immer dabei gemacht bisher, ohne recht zuwissen, was es bedeutet...na aj, ich lerne ja noch :)
Zitat:
3. Du solltest dich entscheiden, ob du deine Tabelle jetzt "monde"
$this->bbcode_second_pass_code('', 'CREATE TABLE `monde` ( ')
oder "mond"
$this->bbcode_second_pass_code('', 'INSERT INTO mond...')
nennen willst ;)

AUTSCH! Ja, Flüchtigkeitsfehler :pein:

Wobei ich, ganz ehrlich gesagt, mehr bedenken habe, sind folgende Teile:
$this->bbcode_second_pass_code('', '
$sql = "SELECT * FROM monde WHERE mondnr='zyklus'";
$result = db_query($sql);
$row = db_fetch_assoc($result);
$mz1=$row[erkan];
$mz2=$row[stefan];
if ($mz1==32){
$sql = "UPDATE monde SET zyklus= ""0"" WHERE mondnr=''";
db_query($sql);
}else{
$newm=($row[zyklus]+1);
$sql = "UPDATE monde SET zyklus= "".$newm."" WHERE mondnr=''";
db_query($sql);
}
if ($mz2==40){
$sql = "UPDATE monde SET zyklus= ""0"" WHERE mondnr=''";
db_query($sql);
}else{
$newm=($row[zyklus]+1);
$sql = "UPDATE monde SET zyklus= "".$newm."" WHERE mondnr=''";
db_query($sql);
}
')
ich hab bisher immer nur solche Abfragen gemacht für table, deren Primary Key sich auf Personen bezogen, "Gegenstände" sind für mich Neuland...Aber ich danke Dir schon mal sehr für die Korrektur im oberen Teil, wenn das Ganze fertig ist, kommt es, natürlich getestet, in korrekter Form, in den Forenteil, in den es gehört :) :wink:

_________________
Ich bin das Land, meine Augen sind der Himmel, meine Glieder die Bäume, ich bin der Fels, die Wassertiefe. Ich bin nicht hier, um die Natur zu beherrschen oder sie auszubeuten. Ich bin selbst Natur.

(Hopi)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi 30 Aug, 2006 00:29 
Offline
Großmeister
Großmeister
Benutzeravatar

Registriert: Fr 06 Jan, 2006 01:33
Beiträge: 459
Wohnort: Simmern
Geschlecht: Männlich
LoGD: http://www.morpheus-lotgd.de
Erste, korrigierte Fassung:

$this->bbcode_second_pass_code('', '
CREATE TABLE `monde` (
`mondnr` int( 10 ) unsigned NOT NULL auto_increment,
`mondname` varchar(50) NOT NULL default '',
`zyklus` int( 10 ) unsigned NOT NULL default '0',
PRIMARY KEY ( `mondnr` )
) TYPE = MYISAM ;
')


Dann gib den Monden Namen, als Beispile siehst Du hier Erkan und Stefan, überleg Dir Mondzyklen (Tage, die der Mond benötigt, um einmal um den Planeten zu wandern, hier hab ich 32 und 40 genommen) und führe dann aus
Code:

$this->bbcode_second_pass_code('', '
"INSERT INTO monde (mondname, zyklus) VALUES ('erkan', '32')";
"INSERT INTO monde (mondname, zyklus) VALUES ('stefan', '40')";
')


In der setnewday, z.B. hinter vendor:
$this->bbcode_second_pass_code('', '



//Mondphasen by Morpheus
$sql = "SELECT * FROM monde WHERE mondnr='zyklus'";
$result = db_query($sql);
$row = db_fetch_assoc($result);
$mz1=$row[erkan];
$mz2=$row[stefan];
$p1=kaum zu sehen;
$p2=sichelförmig und zunehmend;
$p3=halb und zunehmend;
$p4=fast voll und zunehmend;
$p5=voll;
$p6=fast voll und abnehmend;
$p7=halb und abnehmend;
$p8=sichelförmig und abnehmend;
if ($mz1==32){
$sql = "UPDATE monde SET zyklus= \""0"\" WHERE mondnr=''";
db_query($sql);
}else{
$newm=($row[zyklus]+1);
$sql = "UPDATE monde SET zyklus= \"".$newm."\" WHERE mondnr=''";
db_query($sql);
}
if ($mz2==40){
$sql = "UPDATE monde SET zyklus= \""0"\" WHERE mondnr=''";
db_query($sql);
}else{
$newm=($row[zyklus]+1);
$sql = "UPDATE monde SET zyklus= \"".$newm."\" WHERE mondnr=''";
db_query($sql);
}
if ($mz1<5){
$mo=$p1;
}elseif (($mz1>=5) && ($mz1<9)){
$mo=$p2;
}elseif (($mz1>=9) && ($mz1<13)){
$mo=$p3;
}elseif (($mz1>=13) && ($mz1<17)){
$mo=$p4;
}elseif (($mz1>=17) && ($mz1<21)){
$mo=$p5;
}elseif (($mz1>=21) && ($mz1<25)){
$mo=$p6;
}elseif (($mz1>=25) && ($mz1<29)){
$mo=$p7;
}elseif (($mz1>=29) && ($mz1<33)){
$mo=$p8;
}
savesetting("erk",$mo);
if ($mz2<6){
$mo1=$p1;
}elseif (($mz2>=6) && ($mz1<11)){
$mo1=$p2;
}elseif (($mz2>=11) && ($mz1<16)){
$mo1=$p3;
}elseif (($mz2>=16) && ($mz1<21)){
$mo1=$p4;
}elseif (($mz2>=21) && ($mz1<26)){
$mo1=$p5;
}elseif (($mz2>=26) && ($mz1<31)){
$mo1=$p6;
}elseif (($mz2>=31) && ($mz1<36)){
$mo1=$p7;
}elseif (($mz2>=36) && ($mz1<41)){
$mo1=$p8;
}
savesetting("stef",$mo1);
//Mondphasen Ende
')


und schließlich in der newday.php suche

$this->bbcode_second_pass_code('', '


output("`2`nDer Schmerz in deinen wetterfühligen Knochen sagt dir das heutige Wetter: `^".$settings['weather']."`2`n");

')

füge danach ein:
$this->bbcode_second_pass_code('', '


//Mondphasen by Morpheus
output("`2`nAm Himmel sind die 2 Monde, Erkan und Stefan zu sehen. Erkan ist `^".$settings['erk']."`2, Stefan ist `^".$settings['stef']."`2`n");
//Mondphasen Ende
')

_________________
Ich bin das Land, meine Augen sind der Himmel, meine Glieder die Bäume, ich bin der Fels, die Wassertiefe. Ich bin nicht hier, um die Natur zu beherrschen oder sie auszubeuten. Ich bin selbst Natur.

(Hopi)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi 30 Aug, 2006 00:51 
Offline
Held
Held
Benutzeravatar

Registriert: Di 23 Aug, 2005 23:46
Beiträge: 268
Wohnort: Köln
LoGD: http://www.dragnir.de
Oh.. ist mir vorhin garnicht Aufgefallen, dass da noch SQLs im unteren Bereich folgen.. :???:

Dann mal los *gg*

$this->bbcode_second_pass_code('', '$sql = "SELECT * FROM monde WHERE mondnr='zyklus'"; ')

Hm.. im besten Fall liefert dir dieses SELECT einfach nichts zurück, aber ich denke es gibt sogar einen Fehler.. Du wählst nämlich sämtliche Spalten (SELECT *) aus der Tabelle Monde (FROM monde) aus, für welche gilt, dass die Mondnummer gleich der Zeichenkette 'zyklus' ist (WHERE mondnr='zyklus').
Aber da eine Mondnummer wohl kaum eine Zeichenkette sein kann, ist das ziemlich unsinnig. Ich vermute einfach du möchtest sämtliche Monde auslesen. und dann auf die einzelnen Daten, also vor allem den Zyklus zugreifen. Das geht z.b. so:

$this->bbcode_second_pass_code('', '//Mondphasen by Morpheus
$sql = "SELECT * FROM monde WHERE mondname='erkan'";
$result = db_query($sql);
$row = db_fetch_assoc($result);
$mz1=$row[zyklus]; ')

Wenn du sämtliche Monde auf einmal auslesen möchtest, dann bau dir eine Schleife drumherum (als Anregung kannst du dir mal den Usereditor ansehen - user.php)

Zu deinen UPDATE-querys:
$this->bbcode_second_pass_code('', '$sql = "UPDATE monde SET zyklus= \""0"\" WHERE mondnr=''";')
Das ganze gedöns um die Null kannst du weglassen, also etwa so
$this->bbcode_second_pass_code('', '$sql = "UPDATE monde SET zyklus=0 WHERE mondnr=''";')

Allerdings wird sich dann in deiner Datenbanktabelle nichts tun, denn die Abfrage wird nur auf die Zeilen angewendet, in denen die Mondnummer einer leeren Zeichenkette entspricht, und das ist niemals der Fall.
Wahrscheinlicher willst du eher sowas wie:
$this->bbcode_second_pass_code('', '$sql = "UPDATE monde SET zyklus=0 WHERE mondname='erkan'";')

Ich hoffe ich konnte dir damit helfen ;) :wink:

_________________
Warum UNIX/Linux böse ist:

- 'kill' macht Menschen zu brutalen, blutrünstigen Bestien
- 'killall' züchtet regelrecht Massenmörder
- 'whoami' löst bei psychisch labilen Personen Existenzkrisen aus!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi 30 Aug, 2006 04:35 
Offline
Großmeister
Großmeister
Benutzeravatar

Registriert: Fr 06 Jan, 2006 01:33
Beiträge: 459
Wohnort: Simmern
Geschlecht: Männlich
LoGD: http://www.morpheus-lotgd.de
Oh ja, Lestat, das konntest Du, denn genau das hatte ich gemeint...wenn ich heute Abend von der Arbeit komme werde ich die richtieg Funktion zusammen setzen, dann ist sie testreif. Vielen Dank für die kleien Lektion in SQL, denn nur so kann ich was lernen aus den Fehlern... :) :wink:

_________________
Ich bin das Land, meine Augen sind der Himmel, meine Glieder die Bäume, ich bin der Fels, die Wassertiefe. Ich bin nicht hier, um die Natur zu beherrschen oder sie auszubeuten. Ich bin selbst Natur.

(Hopi)


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 6 Beiträge ] 

Alle Zeiten sind UTC + 1 Stunde


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 22 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen
Du darfst keine Antworten zu Themen in diesem Forum erstellen
Du darfst deine Beiträge in diesem Forum nicht ändern
Du darfst deine Beiträge in diesem Forum nicht löschen
Du darfst keine Dateianhänge in diesem Forum erstellen

Suche nach:
Gehe zu:  
cron
POWERED_BY
Deutsche Übersetzung durch phpBB.de
anpera.net - Impressum