Avatar billede davidskp Nybegynder
03. marts 2009 - 03:19 Der er 9 kommentarer og
1 løsning

Select og add duplicates

Jeg har en tabel med stats for spillerne på vores fodboldhold

Tabellen har følgende felter:

number (spillernummer)
season
matches
goals
assists
ycars
rcards

Det vil sige at der kommer duplicates i number (en kolonne for sæson 2008 og en for 2009)

Jeg ka godt hente dem ud hver for sig og vise stats fra henholdsvis 2008 og 2009, men hvordan viser jeg spillernes samlede stats fra alle sæsoner?

På forhånd tak for hjælpen :)

/dave
Avatar billede Slater Ekspert
03. marts 2009 - 08:16 #1
SELECT SUM(goals) FROM ... WHERE number=...

Noget i den stil?
Avatar billede davidskp Nybegynder
03. marts 2009 - 11:25 #2
Ikke helt - jeg vil gerne hente hele tabellen ud, ikke kun et enkelt number. De kolonner hvor number er identisk skal værdierne (matches, goals, etc) lægges sammen så jeg får en oversigt over alle spillernes samlede stats.
Avatar billede Slater Ekspert
03. marts 2009 - 14:08 #3
Og det er præcis hvad SUM() gør.

Ellers forstår jeg stadig ikke hvad du mener.
Avatar billede davidskp Nybegynder
03. marts 2009 - 14:12 #4
så må jeg ha misforstået noget. gider du prøve at skrive hele SELECT som du mener den skal se ud. og husk at jeg vil ha alle numbers, ikke kun én (WHERE number =...)

:)
Avatar billede Slater Ekspert
03. marts 2009 - 17:43 #5
Okay, hvis du vil have alle numbers, laver du en

SELECT SUM(goals) FROM <tabelnavn> GROUP BY(numbers)
Avatar billede Slater Ekspert
03. marts 2009 - 17:44 #6
Hov, number - ikke numbers.
Avatar billede davidskp Nybegynder
03. marts 2009 - 22:21 #7
Yes så tror jeg sq det virker :)

min query ser nu sådan ud:

$query = "SELECT number, SUM(matches) AS matches, SUM(goals) AS goals, SUM(assists) AS assists, SUM(ycards) AS ycards, SUM(rcards) AS rcards FROM stats GROUP BY number ORDER BY SUM($_GET[sort]) DESC, number ASC";

Det jeg manglede var "AS ...." for at få fat i værdien. Hvis der er en nemmere måde end ovenstående lytter jeg gerne :)

Mange tak for hjælpen viperine - smider du et svar? :)
Avatar billede Slater Ekspert
03. marts 2009 - 23:00 #8
Det ser fornuftigt nok ud, lige bortset fra at du putter en $_GET værdi direkte ind i en SQL-forespørgsel. Det er du forhåbentlig klar over farerne ved?
Avatar billede davidskp Nybegynder
04. marts 2009 - 00:34 #9
Det kommer an på hva du mener med fare
Avatar billede Slater Ekspert
04. marts 2009 - 08:49 #10
SQL injection - den mest almindelige måde at ødelægge eller hacke mindre sider på, da mange stadig ikke tænker over det.

Enhver bruger kan ændre i en $_GET variabel, derfor putter du faktisk noget direkte ind i en SQL-streng, som enhver bruger kan ændre i uden problemer. Derved giver du alle mulighed for at afslutte den eksisterende SQL-streng, og sætte deres egen kode ind, som f.eks. kan slette databasen.

ALTID (med mindre man har meget god grund til andet) køre $_GET, $_POST og $_COOKIE variabler gennem funktionen mysql_real_escape_string() før de bruges i SQL.

F.eks.:
$sort = mysql_real_escape_string($_GET['sort']);
$sql = "SELECT ... ORDER BY $sort";
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester