[MsSQL] & [Script?] Größte zahl suchen

Hmmmm.. dir wurde doch im anderen Thread schon eine ID als primary key + auto_increment empfohlen (oder evtl. wenigstens ein eher ungünstigeres unique). Ansonsten könntest du noch lustig versuchen Tabellen zu locken (siehe Fred vom zerHacker hier im Programmierforum; analog halt in mySQL, sollte es in MSSQL ja auch geben).

das problem ist das primary key + auto_increment nicht gehen weil das spiel selber, also der server ohne primary key + auto_increment arbeitet, wenn ich es änder kann der server keine items mehr einfügen
 
Dann überprüfe mal die Logik der Geschichte, eine ID enthält für gewöhnlich keinerlei informationen sondern dient nur zum durchnummerieren und wenn sie nicht als primäry key verwendet werden kann ist das ganze Feld eigentlich für die Katz.
 
es ist so

3 user a, b, c

user a hat 3 items 889, 890, 891 // läuft

user b hat 2 items 889, 890 // läuft

user c hat 2 items 889, 889 // kommt n fehler

1 user darf nicht 2 mal die selber nummern haben :/

und user c hat 2 mal die selbe id weil das script für die items zu schnell war, glaube das das daran liegt?!
 
Wie happymaster bereits gesagt hat: Locking ist hier wohl das Zauberwort (schau dir mal InnoDB an).
Oder du verwendest REPLACE INTO, da sollte es dann egal sein.

Wenn das Spiel ohne Primärschlüssel arbeitet, lässt das auf einen warscheinlich schlechten Code, DB-Design etc zurückschließen. Pro User 1 Server :mrgreen:

Gruß
 
Ahh jetzerle du verwendest praktisch keien Zähl ID's sondern einfach nur Fremdschlüssel Benutzer Tabelle und zweite Spalte Fremdschlüssel Materialtabelle.

Du könntest noch eine Spalte Menge dran hängen und statt 4 Spalten Spieler X Material Y dann alles in eine Zeile schreiben, die Kombination aus Material und Spieler wäre dann dein Primär Schlüssel.
 
Du könntest noch eine Spalte Menge dran hängen und statt 4 Spalten Spieler X Material Y dann alles in eine Zeile schreiben, die Kombination aus Material und Spieler wäre dann dein Primär Schlüssel.

Wenn ich solche Tipps schon höre ... naja, dann könnte man auch gleich auf eine Datenbank verzichten und alles in eine Datei schreiben ... das widerspricht nämlich völlig dem Prinzip einer Datenbank.
Ein Unique kann sich über mehrere Spalten erstrecken, deswegen ist das weder notwendig, noch sollte man diese Daten in eine Spalte zusammenfassen!

Und wieso soll es bei MSSQL nicht mit Primary gehen? Sogar das "MSSQL für Arme" Access (ok, zugegeben, man kann es nicht gänzlich vergleichen *g*) beherrscht das!


Übrigens, Tabellen locken lässt sich in vielen Fällen vermeiden.
Beispiel: Statt zu schreiben

$var = sql(SELECT val FROM table)
$var = $var + $x
sql(UPDATE table SET val = $var)

kann man gleich schreiben:

sql(UPDATE table SET val = val + $x)

So ähnlich kann man in vielen Fällen vorgehen.


Ist schneller, jede SQL-Anweisung für sich hat eine Art internes Locking und man läuft keine Gefahr, das System zu verlangsamen oder daß es gar blockt wegen den Table-Locks.


@assactions: Ich würde dir mal empfehlen, dir mal grundlegendes Basiswissen anzueignen, denn ich habe den Eindruck, daß es da bei dir gewaltige Lücken gibt.
 
Ich habe in keinem Wort etwas davon gesagt das da Spalten zusammen gefaßt werden sollen, sondern nur ausdrücken wollen das eine spalte menge sinvoller ist als 38 Datensätze wenn ein Spieler einen Gegenstand 38 mal besitzt.

Man kann auch vorneweg nochmal eine richtige ID dran hängen, die Spalten die er bisher verwendet sind in seinem Fall jedenfalls einzeln nicht als Primary Key tauglich, da beides Fremdschlüssel.
 
Ich habe in keinem Wort etwas davon gesagt das da Spalten zusammen gefaßt werden sollen, sondern nur ausdrücken wollen das eine spalte menge sinvoller ist als 38 Datensätze wenn ein Spieler einen Gegenstand 38 mal besitzt.

Man kann auch vorneweg nochmal eine richtige ID dran hängen, die Spalten die er bisher verwendet sind in seinem Fall jedenfalls einzeln nicht als Primary Key tauglich, da beides Fremdschlüssel.

Na, dann habe ich dich aber vöööööllig falsch verstanden *g*
Man könnte sagen: Du meintest die vertikale während ich die horizontale Zusammenfassung verstanden haben ... wo ich da wohl mit meinen Gedanken war??? :biggrin:

Sorry, kann mal passieren :)

OT: Kann ich deine Signatur mir kopieren? Die gefällt mir ;)
 
ich hätte noch ne geniale Idee für die Aufgabe mit der größten Zahl (ist zwar gelöst aber egal):
Code:
1. lade alle Daten aus der Datenbank
2. definiere eine Max-Id mit 0
3. für alle Werte aus der db
3.1 wenn zahl größer als Max-Id ist in der Variable speichern
4. fertig !

so, und jetzt dürft ihr mich schlagen :ugly: :ugly: :ugly:


das musste ich eben gerade in einem Code sehen *schauder*
 
so, und jetzt dürft ihr mich schlagen :ugly: :ugly: :ugly:

Das bist du garnicht wert .... :ugly:
Ich geb dir dafür lieber 'ne Auszeichnung :ei:

Du kannst ja die Daten alle in ein Array lesen lassen, dieses aufsteigend sortieren lassen und dann obigen "effizienten Suchlauf" drüberlassen :ugly: :LOL:

Hmm ... ich hätte noch eine Optimierung:

Alle Daten in den Speicher einlesen, die erste Zahl setzen, dann für jeden weiteren Datensatz alle Daten erneut einlesen und das 2. Arrayelement rauspicken, wenn grösser, als der Wert davor, merken. Für den 3. bis zum letzten Datensatz erneut den ganzen Loop ... das wäre ein geiler Algorithmus, denn man spart sich das Sortieren :evil:

:ugly: :ugly: :ugly:

bitte nischt schlagen bitte nischt schlagen bitte nischt schlagen
 
[Ei]
Du kannst die Datenbank Abfrage auch an ein speziellen Arbeitscenter schicken lassen, 1 Euro Jobber gehen dort die ausgedruckte Liste durch und senden dir das Abfrage Ergebnis per E-Mail zurück.
[/Ei]

Ok das war jetzt wirklich extrem Eiig....