Ritar upp först hur det ser ut och vad jag vill åstadkomma
Tabell 1
id Member Earned
---|--------|-------|
1 Test 0
2 Test2 0
Tabell 2
id Mid Earned
---|--------|-------|
1 1 25
2 2 16
3 1 18
Nu vill jag alltså uppdatera Earned i Tabell 1 med datat i Tabell 2 och rätt earned för rätt user. Lyckas inte sumera Earned per user i Tabell 2 och sen trycka in det datat på rätt user i Tabell 1. Any ideas?
Tack på förhand
sl0kMedlem sedan maj 2005562 inlägg finns flera sätt..
1. Det enklaste..
$sql = "SELECT SUM(Earned) as earned FROM tabell2 WHERE mid='$userId' LIMIT 1";
$res = mysql_query($sql) or die(mysql_error());
$svar = mysql_fetch_array($res);
$sql = "UPDATE tabell1 SET Earned = '{$svar['earned']}' WHERE id='$userId'";
mysql_query($sql) or die(mysql_error());
2. Aldrig testat.. men följande borde, efter lite trixande, fås att fungera
UPDATE tabell1, tabell2 SET tabell1.Earned = SUM(tabell2.Earned) WHERE tabell2.Mid = '$userId';
/red
3. inte testa heller...
INSERT INTO tabell1 (id, Earned) SELECT id, SUM(Earned) as earn FROM tabell2 WHERE Mid='$userId' ON DUPLICATE KEY UPDATE tabell1.Earned = tabell2.earn
Förslag 1 är bra om du kör en och en men det är inte tanken...tanken är att när jag för in el ta bort från en tabell så ska han uppdatera alla på en gång.
Förslag 2 går inte pga att den gapar om group by inte är ditlagt och vad jag vet så går det inte att köra group by i en update fråga.
Förslag 3 är inte bra pga att den för in nya poster vilket inte hjälper alls..jag vill ju uppdatera dom nuvarande inte föra in nya
LarsGMedlem sedan dec. 200012 464 inlägg update t1
set earned =
(select sum(earned)
from t2
where t1.id = t2.mid)
Varför vill du göra denna uppdatering alls? Du introducerar bara en risk för att få inkonsistent data.
Jag har ett poäng system som jag har byggt upp som bygger på hur mycket en person har varit med i olika events och hur mycket han har betalt för alla saker osv osv. Uppdateringen här är för att räkna ut hur aktiv han har varit dom 4 senaste veckorna.
Kan säga att systemet är väldigt komplext uppbyggt el med andra ord väldigt dynamiskt gjort. Plockar jag bort ett event exempelvis så räknar systemet ut automatiskt hur mycket poäng som ska tas bort från diverse kolumner&tabeller osv samt räknar ut en ny "attendance" och för in det för varje user.
Poäng systemet kan du se på denna adress https://www.afgm-wow.com/teqno
där får du en liten bättre ide om vad det handlar om.
Kom på dock ett sätt att lösa det på och så här ser det ut.
mysql_query("DROP TEMPORARY TABLE IF EXISTS `results`");
mysql_query("
CREATE TEMPORARY TABLE results
SELECT
members.id,
sum(events_players.hours) AS hours,
sum(events.maxatt) AS tothours,
sum(events_players.earned) AS earned
FROM events_players
INNER JOIN members ON events_players.mid=members.id
INNER JOIN events ON events_players.event=events.id
GROUP BY events_players.mid");
mysql_query("UPDATE
members,results
SET
members.earned=results.earned,
members.attended=results.hours,
members.attended_total=results.tothours
WHERE members.id=results.id");