webForumDet fria alternativet

Hur får jag ut infon efter sumering?

Databaser & SQL

7 svar · 439 visningar · startad av Skogiz

Medlem sedan feb. 200395 inlägg
Frågan#1
$data = mysql_db_query("databasen", "SELECT playerid, max(actionid) FROM matches where actionid = '$actionid' group by playerid");

      while ($rad = mysql_fetch_assoc ($data))
   {
    print "Spelare ";
    print $rad["playerid"];
    print "har gjort ";
    print $rad["max(actionid)"];
}

När jag kör koden ovan blir det bara blankt.
Om jag kör frågan

SELECT playerid, max(actionid) FROM matches where actionid = '3' group by playerid;

i querybrowser så får jag fram data...

Någon som kan hjälpa mig att få till korrekt kod

Tack på förhand

Medlem sedan juni 20006 031 inlägg
#2

Sätt ett alias på din max()

$data = mysql_db_query("databasen", "SELECT playerid, max(actionid) as summa FROM matches where actionid = '$actionid' group by playerid");
print $rad["summa"];

edit /
Jäkla bugg som slänger in smilies.

Medlem sedan sep. 2006867 inlägg
#3

Jag är inte så supervass på vare sig PHP eller MySQL men jag skulle gissa att du i din associativa array inte kan ropa på fältnamnet "max (actionid)" utan att du i SQL-frågan måste använda AS och ge ditt maxvärde ett namn explicit som du sedan ska använda.

Alltså:

$data = mysql_db_query("databasen", "SELECT playerid, max(actionid) AS max_a_id FROM matches where actionid = '$actionid' group by playerid");

      while ($rad = mysql_fetch_assoc ($data))
   {
    print "Spelare ";
    print $rad["playerid"];
    print "har gjort ";
    print $rad["max_a_id"];
}

Sedan kan man ju fråga sig varför i allsin dar du vill ta ut max (actionid) när du i redan i frågan tar ut alla rader som har ett visst action-id, du vet ju redan vad max av ett unikt värde är (=sig självt).

Har du tänkt igenom ordentligt? :)

mvh

/red: såklart han pedda först :) Och dumma smileys

Medlem sedan feb. 200395 inlägg
#4

Det där funkade mycket bättre ja! Tack! (y)

Men hur blir det om jag istället för spelar-id vill ha namnet på spelaren. Jag har alla spelare i en egen tabell (players) där de får ett unikt id (det id som jag nyss sökt fram)

Är det en INNER JOIN man ska köra då men hur bör den se ut?

Medlem sedan juni 20006 031 inlägg
#5

Flyttar från PHP

Medlem sedan sep. 2006867 inlägg
#6

Det stämmer att det är en join du ska göra. Under antagandet att din tabell "players" har en kolumn som heter "name" och en som heter "ID" så skriver man såhär:

$data = mysql_db_query("databasen", "SELECT p.name, max(m.actionid) AS max_a_id FROM matches m INNER JOIN players p ON p.ID = m.playerid WHERE m.actionid = '$actionid' GROUP BY m.playerid");
Medlem sedan feb. 200395 inlägg
#7

Tack headbug! :e

Funkar det att baka ihop fältnamn?
Alltså typ så här

Concat( p.surename, ' ', p.lastname ) AS fullname
Medlem sedan sep. 2006867 inlägg
#8

Japp det ska det göra.

282 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
152 ms — deklarationer (db)
0 ms — hämta statistik (cache)
127 ms — hämta tråd, inlägg och bilagor (db)
151 ms — ändringar (db)