MYSQL Abfrage und Update in einem

kcyberbob

Erfahrenes Mitglied
Hi zusammen,

ich hätte mal eine Frage zu MySQL und zwar wie sieht es denn rein Performance technisch aus, wenn man in einer Abfrage mit while dann denn selben Datensatz updated?

Ich hab nämlich eine Tabelle mit lauter Spielern die Ergebnisse haben. Diese Spieler werden anhand der Ergenisse in einer Rangliste angezeigt.
Jetzt würde ich während der Abfrage einen Counter mitlaufen lassen und diesen in die Datenbank reinschreiben, damit in der Datenbank passen zu jedem User der aktuelle Rankingplatz steht. Dieser wird ja erste ermittelt wenn die Abfrage kommt, da man vorher nicht weißt wieviele Spieler es sind und auf welchem Platz er sich befinden.

Ich hoffe ich konnte es jetzt einigermaße gut erklären.

LG
 
PHP:
$count = 1;
$query = mysql_query("SELECT * FROM rank_gesamt ORDER BY gesamt DESC");
while ($row = mysql_fetch_array($query)) {

  $update = mysql_query("UPDATE rank_gesamt SET rank='$count' WHERE id='$row['id']'");

######
Hier natürlichdie Ausgabe noch
######

$count++;
}
 
Wozu ein SELECT und ein WHERE beim UPDATE?

Du wählst alle aus. Dann gehst du sie durch und machst den UPDATE auf jede einzelen Zeile

Das folgende SQL macht genau das selbe wie dein SELECT & UPDATE
SQL:
UPDATE rank_gesamt 
SET rank='$count'

Aber wahrscheinlich hast du vergessen ein $count++ einzufügen.

Was du willst dürfte ungefähr das sein
SQL:
UPDATE 
	-- Zu updatende Tabelle
	rank_gesamt AS t,
	-- Neue Ränge ermitteln
	(
		--Sortierte SELECT mit neuem Rang
		SELECT
			id,
			-- Rang berechnen
			@Rank := @rank+1 AS rank
		FROM
			rank_gesamtt,
			-- Rang initialisieren
			(SELECT @Rank := 0) AS vars
		ORDER BY
			gesamt DESC
	) r
SET
	t.rank = r.rank
WHERE
	t.id = r.id
 
Zuletzt bearbeitet von einem Moderator:
Danke erstmal, und damit kann ich auch gleichzeitig alle Daten mit ausgeben?
Denn das soll ja eine liste sein.
 
Ja dann bringt mir das nichts, denn ich geben die Daten ja gleichzeitig auch aus.
Dann muss ich das doch so machen wie ich oben geschrieben hab.
 
Du kannst auch das Update ausführen und dann erst einen SELECT werfen. Dan hast du 2 DB-Anfragen. So wie du das hast, hast du bei 10'000 User 10'001 DB-Zugriffe. Die Perfermance wird dir bachab gehen.
 
Hmm...aber ich muss doch bei 10000 User auch 10000 mal den Rank eintragen bzw. updaten
Bleibt sich das nicht gleich ob in einer Schleife oder so wie du es geschrieben hast.
 
Die schleife sendet 10'000 mal ein UPDATe an die Datenbank. Mein SQL führt man genau einmal aus. Nicht in einer Schleife.
 
Zurück