• 27.07.2025, 18:49
  • Register
  • Login
  • You are not logged in.

 

Dear visitor, welcome to Aqua Computer Forum. If this is your first visit here, please read the Help. It explains how this page works. You must be registered before you can use all the page's features. Please use the registration form, to register here or read more information about the registration process. If you are already registered, please login here.

iNFiNiTE

God

[sql]: problem mit INSERT

Sunday, May 25th 2008, 9:26pm

moin,

hab ein kleines problem..

wenn ich mittels

Source code

1
CREATE TABLE IF NOT EXISTS player_Hans (ergebniss VARCHAR(11) DEFAULT '0') ENGINE = MYISAM
einen table erstelle kann ich nicht via

Source code

1
UPDATE player_Hans SET ergebniss = '1'
den aktuellen wert für die spalte "ergebniss" auf 1 setzen.
ich muss erst via

Source code

1
INSERT INTO player_hans (ergebniss) VALUES ('1')
einmalig die 1 inserten und kann dann via UPDATE den wert ändern.
das problem ist aber dass ich neben "ergebniss" auch andere spalten habe und diese per script erstelle. wenn ich dann wieder INSERT aufrufe macht INSERT gleichzeitig auch eine neue reihe, was ich aber gar nicht möchte..

gibt es keine möglichkeit bei CREATE TABLE nicht direkt einen default wert reinzuschreiben? DEFAULT '1' bringt leider nichts.. ohne einen ersten INSERT hab ich keine erstelle reihe in der tabelle.

weiß jemand abhilfe?
messi

Eikman

Moderator

Re: [sql]: problem mit INSERT

Sunday, May 25th 2008, 9:33pm

Du legst aber nicht für jeden Spieler eine Tabelle an oder?

Wenn du einmal ein Insert gemacht hast, dann kannst du die Zeile auch updaten. Vorher natürlich nicht.

Ich empfehle dir nochmal ein Grundlagentutorial zu MySQL und/(oder) die Beratung von jemandem der schon länger mit Datenbanken zu tun hat. Kaum etwas ist schlimmer als verkorkste Datenbanklayouts. Richte auf jeden Fall eine ID ein (Integer, Primary Key, Auto increment).

iNFiNiTE

God

Re: [sql]: problem mit INSERT

Sunday, May 25th 2008, 9:41pm

ich kann durchaus sql und kenne auch die grundlagen.. und ja, ich lege pro spieler eine tabelle an, das entspricht auch der normalisierung in meinem bsp.
in meinem fall brauch ich auch keine ID oder ähnliches..

es geht mir einfach darum, dass ich nicht möchte, dass INSERT mir eine weitere, neue zeile in die tabelle haut.

pro spieler sieht mein table in etwa so aus:

Quoted


ergebnisA | ergebnisB | ergebnisC |ergebnisD |usw..
1 | 32 | 22 | 4 | usw..


jedoch hat nicht jeder spieler zu jedem ergebnis einen eintrag. das bedeutet wiederum, dass wenn ich alle spieler in eine tabelle haue ich bei mehr als 70% der felder nur 0 als eintrag. daher pro spieler ein table.

messi

Eikman

Moderator

Re: [sql]: problem mit INSERT

Sunday, May 25th 2008, 9:56pm

Mach zwei Tabellen draus. Eine mit den Spielernamen und eine mit den Ergebnissen. Jede Ergebniszeile hat eine player_id und zeigt auf einen Spieler.
Für jeden Spieler eine Tabelle ist hochgradig schwachsinnig :)

Y0Gi

God

Re: [sql]: problem mit INSERT

Sunday, May 25th 2008, 10:02pm

messi, was für Substanzen hast du dir denn bitte zugeführt?

"Spieler" entspricht einer Klasse, also bildet sich das wunderbar auf eine Tabelle ab. Bei deiner Normalisierung scheinst du irgendwo falsch abgebogen zu sein ...

- "Ergebnis" schreibt man mit nur einem "s"
- Tabellennamen einheitlich; lowercase ist 'ne gute Idee
- 1 ist eine Zahl, kein String, also Typ und Query entsprechend umsetzen
- das Schema sollte sich während des Betriebs des Anwendung *niemals* ändern (falls du das bei nachträglich hinzugefügten Spielern in Kauf genommen haben solltest)
- es gibt iirc bei MySQL ein `REPLACE INTO` oder sowas, dass einen Datensatz einfügt oder, wenn schon existen, aktualisiert - dafür solltest du aber tunlichst IDs haben (zumal sonst auch die Indizes verdammt groß werden dürften)

iNFiNiTE

God

Re: [sql]: problem mit INSERT

Sunday, May 25th 2008, 10:04pm

eike, ich finde es ganz toll dass du IDs und primary keys magst, bringt mich aber ned weiter. selbst wenn ich das so mache wie du vorschlägst steh ich immer noch vor dem gleichen problem.

glaub mir jetzt bitte mal einfach dass ich mir das überlegt habe und das so durchaus sinnvoll ist. und wenn ich was übersehen haben sollte dann wäre es schön wenn du mich drauf hinweist. dann aber konkret und nicht mit "hochgradigem schwachsinn", das hilft mir nämlich keinen sagg weiter.

edit: oh mann. ich mach euch nachher mal ein paar phpmyadmin screenshots, dann werdet ihr schon sehen warum das "schwachsinn" ist, das alles in eine tabelle zu hauen.

Y0Gi

God

Re: [sql]: problem mit INSERT

Sunday, May 25th 2008, 10:05pm

Erläutere doch am Besten deine vorhandenen Daten und was du damit später machen willst, dann können wir deinen Schema-Entwurf diskutieren.

Eikman

Moderator

Re: [sql]: problem mit INSERT

Sunday, May 25th 2008, 10:06pm

Ich habe dich drauf hingewiesen. Das Konzept ist das Problem und daher reicht meine Aussage völlig aus :)
Was hindert dich an einem "schönen" Schema?

iNFiNiTE

God

Re: [sql]: problem mit INSERT

Sunday, May 25th 2008, 10:10pm

ganz einfach:

ich hab eine enorm große textdatei mit logs von bestimmten spielen.
ich möchte nun gewisse informationen aus diesen spielen rausziehen und pro spieler speichern, eine art statistik.

da es sehr viele spieler gibt und ich nicht alle kenne (gleiches gilt übrigens für die ergebnisseX) mach ich das ganze dynamisch an.

ich hatte erst eine große tabelle in der alle spiele und alle spieler drinstehen, jedoch hab ich dann wie gesagt in 80% der felder ne 0.
und ja, ich würde am liebsten auch gerne ints einsetzen und keine varchars, jedoch hab ich leider auch ergebnisse die jenseits der 100.000 liegen und da scheint mysql nix passendes zu haben.

ids und ähnliches brauch ich (imo) nicht, da ich nachher mit einer einfachen abfrage mir die ergebnisse anzeigen lasse.

Eikman

Moderator

Re: [sql]: problem mit INSERT

Sunday, May 25th 2008, 10:14pm

Quoted from "messi"

da es sehr viele spieler gibt und ich nicht alle kenne (gleiches gilt übrigens für die ergebnisseX) mach ich das ganze dynamisch an.


Schon das ist ein Argument gegen dein Vorhaben.

Mein Vorschlag mit einer Spielertabelle und einer Tabelle mit Ergebnissen ist da deutlich praktischer. Du musst ja nur die Zeilen mit Ergebnissen != 0 in die Ergebnistabelle eintragen.

100.000 passt locker in jedes int und sonst gibt es bigint. Beides gibt es zusätlich natürlich als unsigned.

iNFiNiTE

God

Re: [sql]: problem mit INSERT

Sunday, May 25th 2008, 10:17pm

bei meinem entwurf hab ich auch keine einzige zeile mit 0 , da ich ja pro spieler(tabelle) dynamisch spalten anmache, sobald der spieler bei einem bestimmten ergebnis ein resultat erzielt hat ;)

bigint hab ich auch schon probiert, wenn ich dann aber einen wert jenseits der 65536 eingebe bekomm ich in mysql nen error ???

so, meld mich in 2 std wieder, muss nun länder switchen :P

Y0Gi

God

Re: [sql]: problem mit INSERT

Sunday, May 25th 2008, 10:27pm

Quoted from "messi"

ich hatte erst eine große tabelle in der alle spiele und alle spieler drinstehen, jedoch hab ich dann wie gesagt in 80% der felder ne 0.

Beides zusammen in *einer* Tabelle? Dann ist das wenig verwunderlich - aufsplitten.


Quoted from "messi"

und ja, ich würde am liebsten auch gerne ints einsetzen und keine varchars, jedoch hab ich leider auch ergebnisse die jenseits der 100.000 liegen und da scheint mysql nix passendes zu haben.

Hint: Der normale Integer wird in MySQL standardmäßig auf `INT(11)` gesetzt. 11, das ist die Zahl der Stellen. Von `BIGINT` gar nicht zu reden.


Quoted from "messi"

bei meinem entwurf hab ich auch keine einzige zeile mit 0 , da ich ja pro spieler(tabelle) dynamisch spalten anmache, sobald der spieler bei einem bestimmten ergebnis ein resultat erzielt hat ;)

Fühl' dich dafür von mir auf'n Kopp gehauen ;)


Quoted from "messi"

bigint hab ich auch schon probiert, wenn ich dann aber einen wert jenseits der 65536 eingebe bekomm ich in mysql nen error ???

Dann stimmt da bei dir was nicht. `BIGINT` geht von -9223372036854775808 bis 9223372036854775807.


Direkt zum Schema: Zwei Tabellen, `ergebnisse` und `spieler` (hier ist Englisch ein weiteres Mal besser: `players` trifft es durch das Mehrzahl-"s" genauer zur Abgrenzung eines einzelnen "Spieler"s). Beiden verpasst du direkt eine ID und setzt die als Primärschlüssel.

Je nachdem in welcher Beziehung die Ergebnisse zu den Spielern stehen, verwendest du eine entsprechende Relation und einen oder zwei Fremdschlüssel und ggf. eine Zwischentabelle. Betrifft bspw. ein Ergebnis nur einen einzigen Spieler, erhält die `ergebnisse`-Tabelle ein Attribut `player_id` als Fremdschlüssel.

Für jedes vorhandene Ergebnis machst du dann einen `INSERT` in die Tabelle. Ist der Spieler noch nicht angelegt, machst du vorher ein `INSERT` in die Spieler-Tabelle.

Eikman

Moderator

Re: [sql]: problem mit INSERT

Sunday, May 25th 2008, 10:37pm

Eine Tabelle verbraucht in der Datenbank auch mit Sicherheit mehr Speicherplatz als eine 0 bzw. NULL.

iNFiNiTE

God

Re: [sql]: problem mit INSERT

Monday, May 26th 2008, 12:24am

ok eike, da muss ich dir wohl recht geben.
persöhnlich fände ich aber eine tabelle pro spieler übersichtlicher..
naja egal.

ich versteh nur immer noch nicht wieso ich bei meinem szenario spieler und ergebnisse trennen soll...
von den ids mal ganz abgesehen.

und außerdem löst das immer noch ned mein problem. normalisieren ist schön und gut, hilft mir hier jedoch ned weiter.

hurra

God

Re: [sql]: problem mit INSERT

Monday, May 26th 2008, 12:27am

UPDATE ändert nur bestehende Werte, INSERT fügt neue ein. So ist das halt mal.


Auf den ersten Blick mag dein Design übersichtlicher sein (zumindest in phpmyadmin). Sobald jedoch mehr Spieler zum Einsatz kommen und das ganze erweitert werden soll stehst du mit deinem Ansatz schlecht da.

iNFiNiTE

God

Re: [sql]: problem mit INSERT

Monday, May 26th 2008, 12:41am

komisch, die INTs gehen jetz :o

Eikman

Moderator

Re: [sql]: problem mit INSERT

Monday, May 26th 2008, 3:28am

Übersichtlicher? Nur bis du auch andere Informationen in der Datenbank speichern willst.

Ausserdem geht dir vieles verloren:
- Keine schnelle Suche nach Spielern mehr
- Es ist komplizierter Abzufragen, ob es einen Spieler gibt
- Selbst das Erstellen einer Liste aller Spieler ist deutlich komplizierter

Allgemein ist alles was du mit den Daten machst um ein vielfaches langsamer, weil die Datenbank nicht optimieren kann. Nehmen wir mal an, du willst alle Spieler suchen, die ein Ergebnis > 100.000 haben. Du musst dir erstmal eine Liste aller Tabellen holen und dann in jede dieser Tabellen reinschauen. Vor allem bei großen Mengen an Spielern (von denen du ja sprichst), dauert das ewig und verursacht unnötig Rechenlast. Sogar umweltfreundlicher ist Yogis vorschlag, da der Rechner weniger Strom frisst :)

iNFiNiTE

God

Re: [sql]: problem mit INSERT

Monday, May 26th 2008, 10:15am

ihr habt mich ja überzeugt ;)

hab jetz drei tables, einen für die player, einen für die games und einen für die results.
sollte ich dann noch weitere probleme haben meld ich mich hier :P

Y0Gi

God

Re: [sql]: problem mit INSERT

Monday, May 26th 2008, 3:31pm

Das klingt doch schon mal ganz ordentlich.

Clark

God

Re: [sql]: problem mit INSERT

Wednesday, May 28th 2008, 2:30pm

Quoted from "Y0Gi"

Das klingt doch schon mal ganz ordentlich.

und vorallem sinnvoll :)
c++: The power, elegance and simplicity of a hand grenade.