Ich habe den wert "hans;dieter;klaus;peter;" und nun soll php in der MySQL Datenbank für jeden dieser 4 User die Spalte coins um 1 erhöhen.
Ankündigung
Einklappen
Keine Ankündigung bisher.
MySQL Punktesystem
Einklappen
Neue Werbung 2019
Einklappen
X
-
Ich habe einen Kopf, zwei Hände und einen Bleistift. Daneben die Semsterprüfung. Nun muss ich die Lösungen haben.
Merkste was?[URL="https://github.com/chrisandchris"]GitHub.com - ChrisAndChris[/URL] - [URL="https://github.com/chrisandchris/symfony-rowmapper"]RowMapper und QueryBuilder für MySQL-Datenbanken[/URL]
Kommentar
-
Zitat von paulnator2112 Beitrag anzeigenWie währe es mit einem select von allen und dann einen Updatee Befehl?PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services
Kommentar
-
Ich scheiter bereits an der Frage. Gibt es 2 Spalten mit { Spalte 1 = NAMEN; Spalte 2 = COINS } und in Spalte 2 soll dann quasi nur { DISTINCT ANZAHL NAMEN } abgebildet werden?
Zitat von akretschmer Beitrag anzeigenSchalten Sie auch morgen wieder ein zu: Anfänger fragen, Vollpfosten mit Halbwissen antworten!
Kommentar
-
MySQL Punktesystem
Wenn du für so etwas ein explode benötigst empfehle ich der Reihe nach Normalisierung und einen Leitartikel zu "auch Datenbanken können rechnen"...
Mein Vorschlag wäre eine Transaktionstabelle und ein Trigger.[URL="https://github.com/chrisandchris"]GitHub.com - ChrisAndChris[/URL] - [URL="https://github.com/chrisandchris/symfony-rowmapper"]RowMapper und QueryBuilder für MySQL-Datenbanken[/URL]
Kommentar
-
Zitat von ChristianK Beitrag anzeigenWenn du für so etwas ein explode benötigst empfehle ich der Reihe nach Normalisierung und einen Leitartikel zu "auch Datenbanken können rechnen"...
PHP-Code:<?php
// Attention: Concept code
$line = $_POST['data'];
$names = explode(';', $line);
$names = array_map('trim', $names);
$names = array_filter($names);
foreach($names as $name) {
$db->exec('UDPATE table SET coins = coins + 1 WHERE name = :name', ['name' => $name]);
}
Kommentar
-
Zitat von xenot Beitrag anzeigenIch habe den wert "hans;dieter;klaus;peter;" und nun soll php in der MySQL Datenbank für jeden dieser 4 User die Spalte coins um 1 erhöhen.Zitat von Tropi Beitrag anzeigenJa und wo ist da der SELECT?
Kommentar
-
Zitat von rkr Beitrag anzeigenPHP-Code:foreach($names as $name) {
$db->exec('UDPATE table SET coins = coins + 1 WHERE name = :name', ['name' => $name]);
1.000 Namen = 1.000 Queries?
Kommentar
-
Zitat von G.Schuster Beitrag anzeigenRly?
1.000 Namen = 1.000 Queries?PHP-Code:// Attention: Concept code
Kommentar
-
Zitat von rkr Beitrag anzeigen
PHP-Code:$id = 5;
$user = db_fetch_obect(db_query("SELECT * FROM user WHERE id =".$id));
$user->coins++;
db_query("UPDATE user SET coins = ".$user->coins." WHERE id = ".$id);
/*
* Die Methoden db_* sind natürlich erfunden, nicht das jemand den Quatsch hier kopiert
*/
Das SELECT ist unnötig, weil, wie auch schon gezeigt wurde, das gleich mit einem Rutsch im UPDATE geht. Ein zusätzliches SELECT wie oben ist aber NIE nötig, denn entweder die Werte kommen aus der Datenbank, dann kann man das im UPDATE machen oder die Werte kommen von wo anders (z.B. statisch) dann brauchts eben ein explode() o.ä.
Mein letzter Post war darauf bezogen das du einerseits paulnators Antwort verteidigst, es dann aber selber anders (besser; mal abgesehen von den vielen Einzel-Queries) machst.
Kommentar
Kommentar