Nur ein Bild pro User??

Begonnen von NeMeSiSX2LC, 14 Juni 2005, 10:05:34

⏪ vorheriges - nächstes ⏩

0 Mitglieder und 1 Gast betrachten dieses Thema.

NeMeSiSX2LC

Hi, ich hab ein problem wollte in einer Top 10 Anzeigen nur das beste Bild eines User Anzeigen lassen.

Hier die Abfrage:

select * from ".$prefix."_tabelle where (gender='".$_REQUEST['cat']."') and (rating > '0') and (voters > '100') and (points > '200') and checked='1' group by uname order by rating DESC limit 10

So damit sehen ich zwar nur noch ein bild pro User in den Top 10 aber nicht das best bewerteste. Sonder das zweit Beste oder so.

Nun was daran falsch?
CMS-Version: pragmaMx 0.1.8, 1.20.4.5/2006-03-10     
PHP-Version: 5.1.2
MySQL-Version: 5.0.15-max-log
Server-Version: Apache/2.0.55
phpMyAdmin-Version: 2.7.0-pl1

Andi

Hi :)

so einfach geht das nicht...
Kann's jetzt aber auch nicht testen oder aus dem Stehgreif sagen wie...

Schick mir mal nen gefüllten Dump der Tabelle
schön´s Grüssle, Andi

NeMeSiSX2LC

jut ist weitergeleitet kommt ;)
CMS-Version: pragmaMx 0.1.8, 1.20.4.5/2006-03-10     
PHP-Version: 5.1.2
MySQL-Version: 5.0.15-max-log
Server-Version: Apache/2.0.55
phpMyAdmin-Version: 2.7.0-pl1

wob

Sie haben POST ( Andi )


Mfg Rene
Ideen sind immer gut, nur diese Idee`n umsetzen ist eine andere frage :-)

Andi

#4
Hi :)
mal ne verständnisfrage...

Was ist das beste Bild eines Users?
Das mit dem höchsten rating, das mit den höchsten points, oder gibt es da irgend eine Berechnungsformel?

Noch ne Frage...
Auf welcher mysql Version soll das laufen?
>= 4.x , oder noch 3.x
schön´s Grüssle, Andi

NeMeSiSX2LC

Höchstes Rating wenn ichs anderst machen will seh ich ja dann wie es geht.

MySQL 4.1.irgendwas
CMS-Version: pragmaMx 0.1.8, 1.20.4.5/2006-03-10     
PHP-Version: 5.1.2
MySQL-Version: 5.0.15-max-log
Server-Version: Apache/2.0.55
phpMyAdmin-Version: 2.7.0-pl1

jubilee

Hallo !
Zitatselect * from ".$prefix."_tabelle where (gender='".$_REQUEST['cat']."') and (rating > '0') and (voters > '100') and (points > '200') and checked='1' group by uname order by rating DESC limit 10
ZitatSo damit sehen ich zwar nur noch ein bild pro User in den Top 10 aber nicht das best bewerteste. Sonder das zweit Beste oder so.
Mappst Du das Ergebnis in ein Array  ?
Wenn Du NICHT mit aszoziativen Indexen arbeitest, denke daran, das der Index [1] das 2. Ergebnis enthält das erste Ergebnis steht in dem index [0 ]
Nur mal so ein Schuss ins blaue, weil immer das 2 beste Ergebnis gefunden wird ....

MfG
jubilee

NeMeSiSX2LC

while(list($cid,$nam,$picture,$gender,$points,$voters,$rating) = sql_fetch_row($result))

Also öh ja damit hol ich mir die Daten....
CMS-Version: pragmaMx 0.1.8, 1.20.4.5/2006-03-10     
PHP-Version: 5.1.2
MySQL-Version: 5.0.15-max-log
Server-Version: Apache/2.0.55
phpMyAdmin-Version: 2.7.0-pl1

NeMeSiSX2LC

Ich schieb mal wieder bissel haut mich ;)
CMS-Version: pragmaMx 0.1.8, 1.20.4.5/2006-03-10     
PHP-Version: 5.1.2
MySQL-Version: 5.0.15-max-log
Server-Version: Apache/2.0.55
phpMyAdmin-Version: 2.7.0-pl1

NeMeSiSX2LC

Auf die gefahr hin das ich nerven, tu ich ja eh, aber die User steigen uns solangsam aufs dach wegen der Sache!
CMS-Version: pragmaMx 0.1.8, 1.20.4.5/2006-03-10     
PHP-Version: 5.1.2
MySQL-Version: 5.0.15-max-log
Server-Version: Apache/2.0.55
phpMyAdmin-Version: 2.7.0-pl1

wob

Jupp und keiner weiss weiter :(


Mfg Rene
Ideen sind immer gut, nur diese Idee`n umsetzen ist eine andere frage :-)

jubilee

Hallo !
da ich nicht genau weiss, wie die Tabelle aussieht, hier mal als generelles Beispiel ...

Zitat
select feld1, feld2, MAX(rating) AS toprating, feld4, feldn... from ".$prefix."_tabelle where ((gender='".$_REQUEST['cat']."') and (voters > '100') and (points > '200') and (checked='1')) group by uname order by toprating DESC limit 10

Vielleicht hilft das weiter ....

Mfg
jubilee

NeMeSiSX2LC

#12
$result = sql_query("select cid, uname, picture, points, voters, MAX(rating) AS toprating from ".$prefix."_tabelle where (gender='".$_REQUEST['cat']."') and (rating > '0') and (voters > '100') and (points > '200') and checked='1' group by uname order by toprating DESC limit 10");

while(list($cid,$nam,$picture,$gender,$points,$voters,$toprating) = sql_fetch_row($result)) {


So stehts nun drin. Zeigt er aber garkein bild mehr an
CMS-Version: pragmaMx 0.1.8, 1.20.4.5/2006-03-10     
PHP-Version: 5.1.2
MySQL-Version: 5.0.15-max-log
Server-Version: Apache/2.0.55
phpMyAdmin-Version: 2.7.0-pl1

jubilee

Hmmm

Evt liegt es daran, das Du bei der Query nur 6 Felder abfragst unten bei list in der While-Schleife jedoch
versuchst 7 Felder zuzuordnen ?

MfG
jubilee

NeMeSiSX2LC

#14
löl könntest recht haben...

so nun sieht es so aus:

$result = sql_query("select cid, uname, picture, points, voters, MAX(rating) AS toprating from ".$prefix."_tabelle where (gender='".$_REQUEST['cat']."') and (rating > '0') and (voters > '100') and (points > '200') and checked='1' group by uname order by toprating DESC limit 10");

while(list($cid,$nam,$picture,$points,$voters,$toprating) = sql_fetch_row($result)) {

Angezeigt wird immer noch nichts...
CMS-Version: pragmaMx 0.1.8, 1.20.4.5/2006-03-10     
PHP-Version: 5.1.2
MySQL-Version: 5.0.15-max-log
Server-Version: Apache/2.0.55
phpMyAdmin-Version: 2.7.0-pl1

NeMeSiSX2LC

Ok Anzeigen tut er es aber irgendwie Zeigt er das Falsche bild zur Bewertung an. Bewertung usw stimmt Aber wird das zweit Beste bild des User anzeigt. Eigerntlich sollte da ja das bild zum Top eingebniss erscheinen
CMS-Version: pragmaMx 0.1.8, 1.20.4.5/2006-03-10     
PHP-Version: 5.1.2
MySQL-Version: 5.0.15-max-log
Server-Version: Apache/2.0.55
phpMyAdmin-Version: 2.7.0-pl1

jubilee

Hmmmm
ZitatOk Anzeigen tut er es aber irgendwie Zeigt er das Falsche bild zur Bewertung an. Bewertung usw stimmt Aber wird das zweit Beste bild des User anzeigt
Hast Du mal mit der Query direkt im phpMyAdmin probiert.
Dann könnte man feststellen, ob es an der Query liegt (was ich mir eigentlich nicht vorstellen kann), oder ob das Prolem erst irgendwo anders im Script ensteht ...

MfG
jubilee

NeMeSiSX2LC

Hab ich jetzt mal gemacht resultat ist das selbe. Faslsches bild zur Bewertung....
CMS-Version: pragmaMx 0.1.8, 1.20.4.5/2006-03-10     
PHP-Version: 5.1.2
MySQL-Version: 5.0.15-max-log
Server-Version: Apache/2.0.55
phpMyAdmin-Version: 2.7.0-pl1

NeMeSiSX2LC

CMS-Version: pragmaMx 0.1.8, 1.20.4.5/2006-03-10     
PHP-Version: 5.1.2
MySQL-Version: 5.0.15-max-log
Server-Version: Apache/2.0.55
phpMyAdmin-Version: 2.7.0-pl1

Andi

Moin :)

das geht so, nur als Query, nur mit einem Sub-Select in der Datenbankabfrage.
Deshalb die Frage nach der mySql Version, das geht nämlich nur ab 4.x. Wobei ich jetzt nicht weiss, ob mySql das auch mit Sub-Selects auf dei gleiche Tabelle kann...

Probier das mal in phpMyAdmin aus:
SELECT cid, uname, picture, points, voters, rating AS toprating
FROM mx_photovote_pictures AS pic
WHERE (((pic.rating) In (SELECT Max(sb.rating) AS m
FROM mx_photovote_pictures AS sb
WHERE (((sb.rating)>0) AND ((sb.voters)>100) AND ((sb.points)>200) AND ((sb.checked)=1))
GROUP BY sb.uname;
)) AND ((pic.gender)=1) AND ((pic.rating)>0) AND ((pic.voters)>100) AND ((pic.points)>200) AND ((pic.checked)=1))
ORDER BY pic.rating DESC
LIMIT 10;
schön´s Grüssle, Andi

NeMeSiSX2LC

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 6

das haut er mir dann hin
CMS-Version: pragmaMx 0.1.8, 1.20.4.5/2006-03-10     
PHP-Version: 5.1.2
MySQL-Version: 5.0.15-max-log
Server-Version: Apache/2.0.55
phpMyAdmin-Version: 2.7.0-pl1

Andi

Nee, vergiss es, mySql kann das nicht richtig und ein kleiner Fehler ist auch drin....

Hier eine gangbare Lösung mit 2 Abfragen:
$qry = "SELECT uname, Max(rating) AS ma
FROM mx_photovote_pictures
WHERE (((rating)>0) AND ((voters)>100) AND ((points)>200) AND ((checked)=1))
GROUP BY uname
ORDER BY ma DESC
LIMIT 10
";
$result = sql_query($qry);
while ($row = sql_fetch_assoc($result)) {
$inwhere[] = "(rating=".$row['ma']." AND uname='".$row['uname']."')";
}
$inwhere = join(' OR ',$inwhere);

$qry = "SELECT *
FROM mx_photovote_pictures
WHERE ".$inwhere."
ORDER BY rating DESC
LIMIT 30
";

$result = sql_query($qry);
while ($row = sql_fetch_assoc($result)) {
/// hier mach halt was draus....
mxDebugFuncVars($row);
}


Die erste ermittelt die höchste Bewertung der einzelnen User.
Username und Bewertung zusammen ergibt die Bedingung für die 2te Abfrage.
Ein Problem besteht, wenn ein User für mehrere Bilder die gleiche Bewertung hat. Diese Bilder werden dann alle angezeigt. Deswegen das Limit von 30. Hier müsste dann noch ein Check rein, ob von dem User bereits ein Bild angezeigt wurde
schön´s Grüssle, Andi

NeMeSiSX2LC

Scheint wohl zu funzen geb nochmal rückmeldung dann. Danke.

die User sehen das eher wenn da was nicht stimmt ;)
CMS-Version: pragmaMx 0.1.8, 1.20.4.5/2006-03-10     
PHP-Version: 5.1.2
MySQL-Version: 5.0.15-max-log
Server-Version: Apache/2.0.55
phpMyAdmin-Version: 2.7.0-pl1

Andi

Jo gugg mal :)

hab schon was, was nicht stimmt....

ZitatEntfernung(ca.):    5815.07 KM
Ort:    Paderborn
Bundesland/Land:    Nordrhein-Westfalen
grööööööööhl
schön´s Grüssle, Andi

NeMeSiSX2LC

Das doch bei mir auf der Seite? Das liegt nicht am Script sondern an die Daten in der Geo DB
CMS-Version: pragmaMx 0.1.8, 1.20.4.5/2006-03-10     
PHP-Version: 5.1.2
MySQL-Version: 5.0.15-max-log
Server-Version: Apache/2.0.55
phpMyAdmin-Version: 2.7.0-pl1

NeMeSiSX2LC

So ok kann man es auch so machen das nur das bild eines User angeziegt wird das das beste rating, meisten votes und meiste punkte hat?
CMS-Version: pragmaMx 0.1.8, 1.20.4.5/2006-03-10     
PHP-Version: 5.1.2
MySQL-Version: 5.0.15-max-log
Server-Version: Apache/2.0.55
phpMyAdmin-Version: 2.7.0-pl1

NeMeSiSX2LC

Wird das zu aufwendig von der Abfrage her?
CMS-Version: pragmaMx 0.1.8, 1.20.4.5/2006-03-10     
PHP-Version: 5.1.2
MySQL-Version: 5.0.15-max-log
Server-Version: Apache/2.0.55
phpMyAdmin-Version: 2.7.0-pl1

wob

 :-[ Auch nochmal fragt ob es möglich wäre ...


Mfg Rene
Ideen sind immer gut, nur diese Idee`n umsetzen ist eine andere frage :-)

Andi

Zitat von: NeMeSiSX2LC am 15 Juni 2005, 00:51:44
Höchstes Rating wenn ichs anderst machen will seh ich ja dann wie es geht.

MySQL 4.1.irgendwas
Sorry, aber das istn icht immer so ne Sache von 3 Minuten....
NeMeSiSX2LC, schon selbst ne Lösung probiert?
schön´s Grüssle, Andi

NeMeSiSX2LC

Ja hab ich bekomme aber nur schmoder mit raus ist echt nicht einfach der mist :(
CMS-Version: pragmaMx 0.1.8, 1.20.4.5/2006-03-10     
PHP-Version: 5.1.2
MySQL-Version: 5.0.15-max-log
Server-Version: Apache/2.0.55
phpMyAdmin-Version: 2.7.0-pl1

NeMeSiSX2LC

He Andi glaub hab einen verdacht test das nachher mal. Sag dann obs so ging. Den man Lehrt ja nie aus ;)
CMS-Version: pragmaMx 0.1.8, 1.20.4.5/2006-03-10     
PHP-Version: 5.1.2
MySQL-Version: 5.0.15-max-log
Server-Version: Apache/2.0.55
phpMyAdmin-Version: 2.7.0-pl1

NeMeSiSX2LC

So scheint es zu gehen:

$qry = "SELECT uname, Max(rating) AS ma, Max(points) AS pa, Max(voters) AS va
FROM mx_photovote_pictures
WHERE (((rating)>0) AND ((voters)>100) AND ((points)>200) AND ((checked)=1) AND ((gender)='".$_REQUEST['cat']."'))
GROUP BY uname
ORDER BY ma DESC, points DESC, voters DESC
LIMIT 10
";
$result = sql_query($qry);
while ($row = sql_fetch_assoc($result)) {

   

$inwhere[] = "(rating=".$row['ma']." AND voters='".$row['va']."' AND points='".$row['pa']."' AND uname='".$row['uname']."')";

   

}
$inwhere = join(' OR ',$inwhere);

$qry = "SELECT *
FROM mx_photovote_pictures
WHERE ".$inwhere."
ORDER BY rating DESC, points DESC, voters DESC
LIMIT 10
";

$result = sql_query($qry);
while ($row = sql_fetch_assoc($result)) {

   

/// hier mach halt was draus....
CMS-Version: pragmaMx 0.1.8, 1.20.4.5/2006-03-10     
PHP-Version: 5.1.2
MySQL-Version: 5.0.15-max-log
Server-Version: Apache/2.0.55
phpMyAdmin-Version: 2.7.0-pl1

NeMeSiSX2LC

CMS-Version: pragmaMx 0.1.8, 1.20.4.5/2006-03-10     
PHP-Version: 5.1.2
MySQL-Version: 5.0.15-max-log
Server-Version: Apache/2.0.55
phpMyAdmin-Version: 2.7.0-pl1

Andi

ZitatSo scheint es zu gehen:
was jetzt?
schön´s Grüssle, Andi

NeMeSiSX2LC

Ne ging doch alles wieder nicht Falsche Bilder bei der Bewertun  uswg
CMS-Version: pragmaMx 0.1.8, 1.20.4.5/2006-03-10     
PHP-Version: 5.1.2
MySQL-Version: 5.0.15-max-log
Server-Version: Apache/2.0.55
phpMyAdmin-Version: 2.7.0-pl1

Andi

Toll, ich lege mir in Zukunft die Glaskugel neben den PC....
schön´s Grüssle, Andi