myqsl-abfrage mit group ect.

hehe onevote gibs nicht *g*

am besten ich fasse nochmal zusammen *g*

der user kann bei einem Vote 3 spieler wählen...der 1.bekommt 3 pkt, der 2. 2 und der 3. 1 Punkt


Tabelle Starvote (1Datensatz = 1 Vote eines Users...durch IP geloged)
---------------------------------------------------------------------
ID (autoincrement, primary key) - DatensatzID
threepoint (int) - feld für spielerid welcher 3 pkt beim vote bekommen hat
twopoint (int) - feld für spielerid welcher 2 pkt beim vote bekommen hat
onepoint (int) feld für spielerid welcher 1 pkt beim vote bekommen hat
ip (varchar15) - IP des voters (nur um mehrfachvotes zu verhindern)
date - datum des votes (für spätere monatliche abfrage der votes)


Tabelle der Spieler die gevotet werden können
--------------------------------------------------------
ID - eindeutige SpielerID
name - Spielername
und noch weitere Felder welche hier nicht von bedeutung sind..




so und rauskommen soll letztlich eine TOP 3 Liste...also die 3 besten Spieler nach Punkten:

1. Name xx Punkte (1,2,2)
2. Name xx Punkte (1,2,1)
3. Name xx Punkte (0,0,1)


wobei in Klammern die Anzahl der 3Punkte, 2 Punkte und 1Punkte votes angezeigt werden...


soo ich hoffe das nochmal verständlich nahegebracht zu haben ^^
 
gings nicht noch komplizierter :-)

select * from starvote as v left join spieler as s on v.onepoint=s.id,v.twopoint=s.id,v.threepoint=s.id group by s.id

teste bitte mal den befehl aus

dann die erweiterung

statt *

s.name,sum(v.threepoint)as drei,sum(v.twopoint) as zwei,sum(v.onepoint) as eins

wenn das geht erweitern um
(drei + zwei + eins) as rang

dann hinten dran

order by rang desc
 
Zuletzt bearbeitet:
so habs nu so....

$res = mysql_query("select s.name,sum(p.threestar) as three,sum(p.twostar) as two,sum(p.onestar) as one,(three+two+one) as points from spieler as s left join starvote as p on p.threestar=s.id,p.twostar=s.id,p.onestar=s.id group by s.id order by points desc limit 3");


musste noch anpassen..die felder heissen threestar, twostar und onestar

aber geht trotzdem so nicht...
eigentlich gleich beim leftjoin schon nicht...


Fehlermeldung: not suplied mysql argument
 
mich würde viel eher interessieren wie du die Abfrage hinbekommst erstmal ohne das join...das halt erstmal nur die zahlen(spielerids) dastehen....weil nach was willste groupen? kann man das in 3 spalten machen gleichzeitig?
 
nachtrag die sachen nach on
müssen mit or verbunden werden...

v.onepoint=s.id or v.twopoint=s.id or v.threepoint=s.id
 
erstmal schön das du noch wach bist und dir soviel mühe machst...danke ^^

aber geht leider immernoch nicht

hier die query

$res = mysql_query("select s.name,sum(p.threestar) as three,sum(p.twostar) as two,sum(p.onestar) as one,(three+two+one) as points from spieler as s left join starvote as p on p.threestar=s.id or p.twostar=s.id or p.onestar=s.id group by s.id order by points desc limit 3");


und hier die Fehlermeldung

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource
 
habe eben mal ein kleine version deiner db gemacht und siehe da es geht nicht auf einmal :-(

achja statt sum muss es cout sein aber das ist nur kleinkram

also es werden doch 3 abfragen ....

select count(one) select from starvote group by one;

usw mit
zwei und drei

PS
der jetzt ins bett geht :-)
PPS
bis morgen :-)
 
also is meine version mit der temp table garnet so schlecht?


wie muss dann die letzte query lauten für nen left join auf spieler...das raff ich nu überhaupt nicht *G*

PHP:
<?
mysql_query("create temporary table vote (plid int not null,three int not null,two int not null,one int not null)");
mysql_query("insert into vote (plid,three) SELECT threestar, count(*) FROM `starvote` group by threestar");
mysql_query("insert into vote (plid,two) SELECT twostar, count(*) FROM `starvote` group by twostar");
mysql_query("insert into vote (plid,one) SELECT onestar, count(*) FROM `starvote` group by onestar");
$res = mysql_query("select plid, sum(three*3)+sum(two*2)+sum(one) as points, sum(three) as three, sum(two) as two, sum(one) as one from vote group by plid order by points desc limit 3");
?>
 
Zurück