Schrift
[thread]5616[/thread]

Newbie-Frage: ist das kompliziert

Leser: 4


<< >> 4 Einträge, 1 Seite
Crian
 2003-08-11 19:58
#80948 #80948
User since
2003-08-04
5866 Artikel
ModeratorIn
[Homepage]
user image
Zusätzlich solltest Du wohl darauf achten, Dir pro Spieler die Zahl mit dem höchsten Ergebnis zu merken. Da könnte die UNIQUE Variante wegfallen (weiß nicht, ob man da bei MySQL angeben kann, was man will).
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
ak47
 2003-08-11 19:47
#80949 #80949
User since
2003-08-11
24 Artikel
BenutzerIn
[default_avatar]
Hi, ich bin schnell hierhergezogen. Im alten Forum hatte ich bereits einige Lösungen zu folgendem Problem:

Ich habe eine Tabelle in einer Datenbank in der jeweils ein Name und einer Rangnummer stehen, also so Reihen wie:
Helmut;17;
Peter;18;
Jochen;19;
Peter;20;

Da jeder Spieler sich mehrfach in die Liste eintragen kann und je nach Punktestand einen Rang oder mehrere Rangplätze belegt, kommt es vor, dass einige Spieler mehrfach genannt sind. Wenn ich jetzt eine "Active Player List Top 100" erstelle sind da 50 Peter drinne.

snadra hatte schon einen Vorschlag gemacht vor jedem Eintrag mit !exist abzufragen ob er schon drin ist. Wollte ich nachbasteln hat aber nicht gefunzt.
SirLant hatte den Vorschlag mit einem "unique" Befehl nur einen gleichen Namenseintrag zuzulassen.
Hier erst einmal ein recht herzliches Dankeschön. Mit einer Antwort hatte ich so schnell nicht gerechnet.

Leider habe ich keine Erfahrung mit Hashes nur mit Arrays also mit z.B. push (@top100,$name)
Helft Ihr mir auf die Sprünge wie ich einen Hash generiere?
Komme später nochmal rein.

AK47
SirLant
 2003-08-11 19:54
#80950 #80950
User since
2003-08-04
516 Artikel
BenutzerIn
[default_avatar]
Du meinst aus dem Ergebnis der SQL-Abfrage?
Also je nachdem wie du nunmal das Ergebnis holst (fetch_arrayref oder fetch_hashref),
dann schreibst du:
while (my $line = $sth->fetchrow_array){
$top100{$line[0]} = $line[1]
}
Beim Hash:
while (my $line = $sth->fetchrow_hash){
$top100{$line{'name'}} = $line{'punkte'}
}
Für name und punkte, den Namen der Spalte eintragen.
Für dein Vorhaben ist das Zeilenweise einlesen, am besten.

Ansonsten, hier ein paar Tutorials zu DBI:
Quote
http://ffm.junetz.de/members/reeg/DSP/ - DB und MySQL
http://www.perl.com/pub/a/1999/10/DBI.html - Short guide to DBI (eng)
http://www.elektronikschule.de/~grupp/perlcgi/mysql/ - CGI und Datenbanken
http://selfaktuell.teamone.de/artikel/cgiperl/odbc/ - ODBC, PERL und SQL
http://www.mysql.de/documentation/mysql/full/ - MySQL (eng)
http://www.est.fn.bw.schule.de/~grupp/mysql/ - MySQL
http://www.koehntopp.de/kris/artikel/mysql-einfuehrung/ - Einführung in SQL und MySQL
http://perloo.de/DBI - Perl und DBI
http://www.perlunity.de/perl/datenbanken/sql.shtml - Perl::Datenbanken
http://www.little-idiot.de/mysql/ - MySQL Datenbankhandbuch
http://www.mysql.de/documentation/index.html - Das offizielle MySQL-Handbuch
http://aspn.activestate.com/ASPN/CodeDoc/pgsql_perl5/Pg.html - Perl und Pg (eng)
http://www.mut.de/media/buecher/SQL/data/start.htm

Ist aus unserer Linksammlung, weiß nur gerade nicht wo wir die haben, außer hier\n\n

<!--EDIT|SirLant|1060617471-->
--Programming today is a race between Software Enginers striving to build bigger and better idiot-proof Programs,
and the Universe trying to produce bigger and better idiots.
So far, the Universe is winning!
SirLant
 2003-08-11 20:04
#80951 #80951
User since
2003-08-04
516 Artikel
BenutzerIn
[default_avatar]
Wenn er nen Unique auf den Namen legt, dann wird nur verhindert, dass es mehr als einen Spieler mit diesem Namen gibt.
Wie ich im anderen Forum bereits erwähnte:"Wenn die 50Peter immer der gleiche sind, dann überdenke deine Tabellen-Struktur noch einmal".
Würde da dann so arbeiten:
Tabelle "Spieler":
ID Name #weitere Spalten nach belieben
Tabelle "Punkte":
IDvonSpieler Punkte

so kannst du sämtliche Punkte eines Spielers speichern und über die ID, dem Spieler zuordnen :)

Den höchsten Punktestand würde man ungefähr so holen:
Select * FROM Punkte Where ID = 'id' and Punkte = max('punkte');
Bei der Funktion max bin ich mir gerade nicht mehr sicher, da müsstest du mal auf www.mysql.de ins Handbuch schauen.Gibt aber auf jedenfall solch eine Funktion\n\n

<!--EDIT|SirLant|1060618001-->
--Programming today is a race between Software Enginers striving to build bigger and better idiot-proof Programs,
and the Universe trying to produce bigger and better idiots.
So far, the Universe is winning!
<< >> 4 Einträge, 1 Seite



View all threads created 2003-08-11 19:58.