pragmaMx Support Forum

alles für Webmaster => PhP & mySQL => Thema gestartet von: NeMeSiSX2LC am 14 Juni 2005, 10:05:34

Titel: Nur ein Bild pro User??
Beitrag von: NeMeSiSX2LC am 14 Juni 2005, 10:05:34
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?
Titel: Re: Nur ein Bild pro User??
Beitrag von: Andi am 14 Juni 2005, 20:19:34
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
Titel: Re: Nur ein Bild pro User??
Beitrag von: NeMeSiSX2LC am 14 Juni 2005, 20:44:06
jut ist weitergeleitet kommt ;)
Titel: Re: Nur ein Bild pro User??
Beitrag von: wob am 14 Juni 2005, 20:58:46
Sie haben POST ( Andi )


Mfg Rene
Titel: Re: Nur ein Bild pro User??
Beitrag von: Andi am 14 Juni 2005, 22:26:11
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
Titel: Re: Nur ein Bild pro User??
Beitrag 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
Titel: Re: Nur ein Bild pro User??
Beitrag von: jubilee am 15 Juni 2005, 12:06:30
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
Titel: Re: Nur ein Bild pro User??
Beitrag von: NeMeSiSX2LC am 15 Juni 2005, 12:22:30
while(list($cid,$nam,$picture,$gender,$points,$voters,$rating) = sql_fetch_row($result))

Also öh ja damit hol ich mir die Daten....
Titel: Re: Nur ein Bild pro User??
Beitrag von: NeMeSiSX2LC am 16 Juni 2005, 10:34:11
Ich schieb mal wieder bissel haut mich ;)
Titel: Re: Nur ein Bild pro User??
Beitrag von: NeMeSiSX2LC am 17 Juni 2005, 18:33:17
Auf die gefahr hin das ich nerven, tu ich ja eh, aber die User steigen uns solangsam aufs dach wegen der Sache!
Titel: Re: Nur ein Bild pro User??
Beitrag von: wob am 17 Juni 2005, 18:33:53
Jupp und keiner weiss weiter :(


Mfg Rene
Titel: Re: Nur ein Bild pro User??
Beitrag von: jubilee am 17 Juni 2005, 19:24:58
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
Titel: Re: Nur ein Bild pro User??
Beitrag von: NeMeSiSX2LC am 17 Juni 2005, 20:46:18
$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
Titel: Re: Nur ein Bild pro User??
Beitrag von: jubilee am 18 Juni 2005, 08:51:39
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
Titel: Re: Nur ein Bild pro User??
Beitrag von: NeMeSiSX2LC am 18 Juni 2005, 11:32:04
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...
Titel: Re: Nur ein Bild pro User??
Beitrag von: NeMeSiSX2LC am 18 Juni 2005, 11:42:11
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
Titel: Re: Nur ein Bild pro User??
Beitrag von: jubilee am 18 Juni 2005, 21:51:22
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
Titel: Re: Nur ein Bild pro User??
Beitrag von: NeMeSiSX2LC am 19 Juni 2005, 12:12:37
Hab ich jetzt mal gemacht resultat ist das selbe. Faslsches bild zur Bewertung....
Titel: Re: Nur ein Bild pro User??
Beitrag von: NeMeSiSX2LC am 21 Juni 2005, 09:45:11
*schups*
Titel: Re: Nur ein Bild pro User??
Beitrag von: Andi am 22 Juni 2005, 12:21:32
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;
Titel: Re: Nur ein Bild pro User??
Beitrag von: NeMeSiSX2LC am 22 Juni 2005, 13:18:30
#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
Titel: Re: Nur ein Bild pro User??
Beitrag von: Andi am 22 Juni 2005, 13:20:18
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
Titel: Re: Nur ein Bild pro User??
Beitrag von: NeMeSiSX2LC am 22 Juni 2005, 13:30:14
Scheint wohl zu funzen geb nochmal rückmeldung dann. Danke.

die User sehen das eher wenn da was nicht stimmt ;)
Titel: Re: Nur ein Bild pro User??
Beitrag von: Andi am 22 Juni 2005, 13:42:56
Jo gugg mal :)

hab schon was, was nicht stimmt....

ZitatEntfernung(ca.):    5815.07 KM
Ort:    Paderborn
Bundesland/Land:    Nordrhein-Westfalen
grööööööööhl
Titel: Re: Nur ein Bild pro User??
Beitrag von: NeMeSiSX2LC am 22 Juni 2005, 16:11:07
Das doch bei mir auf der Seite? Das liegt nicht am Script sondern an die Daten in der Geo DB
Titel: Re: Nur ein Bild pro User??
Beitrag von: NeMeSiSX2LC am 22 Juni 2005, 16:20:58
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?
Titel: Re: Nur ein Bild pro User??
Beitrag von: NeMeSiSX2LC am 24 Juni 2005, 13:07:02
Wird das zu aufwendig von der Abfrage her?
Titel: Re: Nur ein Bild pro User??
Beitrag von: wob am 27 Juni 2005, 00:46:03
 :-[ Auch nochmal fragt ob es möglich wäre ...


Mfg Rene
Titel: Re: Nur ein Bild pro User??
Beitrag von: Andi am 29 Juni 2005, 19:29:26
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?
Titel: Re: Nur ein Bild pro User??
Beitrag von: NeMeSiSX2LC am 29 Juni 2005, 20:48:11
Ja hab ich bekomme aber nur schmoder mit raus ist echt nicht einfach der mist :(
Titel: Re: Nur ein Bild pro User??
Beitrag von: NeMeSiSX2LC am 29 Juni 2005, 22:32:05
He Andi glaub hab einen verdacht test das nachher mal. Sag dann obs so ging. Den man Lehrt ja nie aus ;)
Titel: Re: Nur ein Bild pro User??
Beitrag von: NeMeSiSX2LC am 30 Juni 2005, 12:24:06
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....
Titel: Re: Nur ein Bild pro User??
Beitrag von: NeMeSiSX2LC am 11 Juli 2005, 14:29:00
*schieb*
Titel: Re: Nur ein Bild pro User??
Beitrag von: Andi am 14 Juli 2005, 16:19:10
ZitatSo scheint es zu gehen:
was jetzt?
Titel: Re: Nur ein Bild pro User??
Beitrag von: NeMeSiSX2LC am 14 Juli 2005, 18:07:57
Ne ging doch alles wieder nicht Falsche Bilder bei der Bewertun  uswg
Titel: Re: Nur ein Bild pro User??
Beitrag von: Andi am 14 Juli 2005, 20:22:34
Toll, ich lege mir in Zukunft die Glaskugel neben den PC....