Anzeige - [Hier werben / Mediadaten]
(?) Tags raten (?) distinct, mysql, sql (edit)
 
Reply to this topicStart new topicStart Poll
> Distinct
kova
Geschrieben am: So 19.02.2006, 16:49
Report PostQuote Post

AyomRank 2
****

Gruppe: Member (aktiv)
Beiträge: 14
Mitglied seit: 13.02.2006


hallo

warum funktioniert nicht der DISTINCT obwohl keine fehler drin sind

CODE
$query2="SELECT DISTINCT P.userid, P.url, P.id,
P.open, P.facetoface_pro, P.facetoface_contra
FROM $sqltable_pics P left outer join $usertable
U on (P.userid = U.id) WHERE(U.code='1') and
(P.open='1') and U.geschlecht='m' ORDER BY round
((100*P.facetoface_pro)/(P.facetoface_contra+
P.facetoface_pro),2) DESC LIMIT 0,10";
$result2 = mysql_query($query2) or die(mysql_error());


soll eigentlich nur ein bild pro user einzeigen.
Top
PMEmail Poster
Top
 
 
Alonso
WEPAX.com
#2 Geschrieben am: So 19.02.2006, 19:53 (+03:03)
Report PostQuote Post

AyomRank 6
************

Gruppe: Member (aktiv)
Beiträge: 517
Mitglied seit: 10.02.2005


Entweder leihst du uns deine Glaskugel, oder stellst noch brauchbare Angaben dazu wink.gif Datenbankaufbau? Was gibt dieses Query z.B. im phpmyadmin aus? Distinct kürzt nur alle über den Select-Bereich identischen Datensätze. Gruppieren/Zusammenfassen geht so nicht.

So wie ich das beurteilen kann, sind pro Benutzer mehrere Bilder abgelegt oder? Und du möchtest einfach alle User mit je einem Bild kriegen, oder? Falls ja, müsstest du noch mit group by U.id oder so arbeiten.


--------------------
Top
PMEmail PosterUsers WebsiteICQ
Top
 
Sascha Ahlers
#3 Geschrieben am: So 19.02.2006, 20:30 (+00:37)
Report PostQuote Post

AyomRank 8
Group Icon

Gruppe: Experten Entwicklung
Beiträge: 1708
Mitglied seit: 27.12.2004


QUOTE (kova @ So 19.2.2006, 16:49)
[...] warum funktioniert nicht der DISTINCT obwohl keine fehler drin sind [...]

Ich glaube der Fehler liegt beim Anwender, DISTINCT wird schon richtig funktioneren. Oder gibt die Abfrage etwa zwei komplett identische Datensätze aus, in dem alle diese Felder gleich sind: "P.userid, P.url, P.id, P.open, P.facetoface_pro, P.facetoface_contra"?



MfG Sascha Ahlers


--------------------
Joseph Joubert: "Der Verstand kann uns sagen, was wir unterlassen sollen. - Aber das Herz kann uns sagen, was wir tun müssen."

Sicherheit beim Programmieren: Top 10 application vulnerabilities in 2007
Top
PMEmail PosterUsers WebsiteICQ
Top
 
kova
#4 Geschrieben am: Mo 20.02.2006, 15:00 (+18:29)
Report PostQuote Post

AyomRank 2
****

Gruppe: Member (aktiv)
Beiträge: 14
Mitglied seit: 13.02.2006


die fehler sind nicht gleich
QUOTE
Felder gleich sind: "P.userid, P.url, P.id, P.open, P.facetoface_pro, P.facetoface_contra"?


nur die P.userid ist gleich bei jedem bild. Deswegen soll distintc die userid nicht wieder hollen alles, aber wenn ich die restlichen felder wege lassen bekomme ich die genau anzahl der userid`s aber das bild wird dann nicht angezeigt und das restliche.
Top
PMEmail Poster
Top
 
Alonso
WEPAX.com
#5 Geschrieben am: Mo 20.02.2006, 15:17 (+00:17)
Report PostQuote Post

AyomRank 6
************

Gruppe: Member (aktiv)
Beiträge: 517
Mitglied seit: 10.02.2005


QUOTE (Alonso @ So 19.2.2006, 19:53)
So wie ich das beurteilen kann, sind pro Benutzer mehrere Bilder abgelegt oder? Und du möchtest einfach alle User mit je einem Bild kriegen, oder? Falls ja, müsstest du noch mit group by U.id oder so arbeiten.

Ich wiederhole mich ungerne.. wink.gif


--------------------
Top
PMEmail PosterUsers WebsiteICQ
Top
 
kova
#6 Geschrieben am: Mo 20.02.2006, 15:34 (+00:16)
Report PostQuote Post

AyomRank 2
****

Gruppe: Member (aktiv)
Beiträge: 14
Mitglied seit: 13.02.2006


jo es funktioniert mit GROUP by userid bloss es gibt noch ein hacken dabei. es liest das erste bild das der user hochgeladen aber nicht das meinst bewerteste.

CODE
SELECT P.userid, P.url, P.open, P.facetoface_pro, P.facetoface_contra FROM $sqltable_pics P left outer join $usertable U on (P.userid = U.id) WHERE(U.code='1') and (P.open='1') and U.geschlecht='m' GROUP BY P.userid ORDER BY round((100*P.facetoface_pro)/(P.facetoface_contra+P.facetoface_pro),2) DESC LIMIT 0,10
Top
PMEmail Poster
Top
 
Sascha Ahlers
#7 Geschrieben am: Mo 20.02.2006, 19:20 (+03:46)
Report PostQuote Post

AyomRank 8
Group Icon

Gruppe: Experten Entwicklung
Beiträge: 1708
Mitglied seit: 27.12.2004


QUOTE (kova @ Mo 20.2.2006, 15:00)
nur die P.userid ist gleich bei jedem bild. Deswegen soll distintc die userid nicht wieder hollen alles, aber wenn ich die restlichen felder wege lassen bekomme ich die genau anzahl der userid`s aber das bild wird dann nicht angezeigt und das restliche.

Ja, das ist ja gerade der entscheidene Punkt, wenn irgendwo ein Datensatz erscheinen würde in dem diesen ganzen Felder gleich sind, wäre es ein Fehler, aber nicht, wenn nur eines der Felder in den einzelnen Datensätzen gleich ist. Somit funktioniert die DISTINCT-Anweisung doch richtig und der Fehler liegt innerhalb der Abfrage begründet. Distinct bezieht sich hierbei auf den kompletten Datensatz und nicht nur auf das erste Feld, es ist in etwa das Gleiche wenn man mehrere Felder bei der GROUP-BY-Anweisung angeben würde.

Um jetzt wegen der Bewertung zu schauen, müsste man überhaupt mal wissen, in welchen Feld die Bewertung gespeichert bzw. auch wie diese gespeichert wird. Für mich wird es zumindestens so nicht ersichtlich, wie Du diese Bewertung speicherst.
Meine Vermutung wäre so, dass die Tabelle wohl nicht vernünftig normalisiert wurde.



MfG Sascha Ahlers


--------------------
Joseph Joubert: "Der Verstand kann uns sagen, was wir unterlassen sollen. - Aber das Herz kann uns sagen, was wir tun müssen."

Sicherheit beim Programmieren: Top 10 application vulnerabilities in 2007
Top
PMEmail PosterUsers WebsiteICQ
Top
 
kova
#8 Geschrieben am: Mo 20.02.2006, 22:04 (+02:43)
Report PostQuote Post

AyomRank 2
****

Gruppe: Member (aktiv)
Beiträge: 14
Mitglied seit: 13.02.2006


QUOTE
Meine Vermutung wäre so, dass die Tabelle wohl nicht vernünftig normalisiert wurde.


wie meinst du des??

CODE
DROP TABLE IF EXISTS backend_pics;
CREATE TABLE backend_pics (
id smallint(6) NOT NULL auto_increment,
url varchar(250) NOT NULL default '',
userid smallint(6) NOT NULL default '0',
date int(11) NOT NULL default '0',
opendate int(11) NOT NULL default '0',
open enum('0','1') NOT NULL default '0',
facetoface_pro int(10) NOT NULL default '0',
facetoface_contra int(10) NOT NULL default '0',
points int(11) NOT NULL default '0',
main char(1) NOT NULL default '0',
ip varchar(255) NOT NULL default '0',
host varchar(255) NOT NULL default '0',
PRIMARY KEY  (id),
UNIQUE KEY id (id)
) TYPE=MyISAM;

so sieht die tabelle aus wo die bewertung gespeichert wird. Und zwar in positiven und negativen bewertungen daraus wird dann der prozent satz gewonnen. Durch diesen code "round((100*P.facetoface_pro)/(P.facetoface_contra+P.facetoface_pro),2)" und nach diesem code wird es auch sortiert.
Top
PMEmail Poster
Top
 
Sascha Ahlers
#9 Geschrieben am: Mo 20.02.2006, 22:41 (+00:37)
Report PostQuote Post

AyomRank 8
Group Icon

Gruppe: Experten Entwicklung
Beiträge: 1708
Mitglied seit: 27.12.2004


Nun, an der Abfrage ist nichts falsch, doch vielleicht hast Du vergessen, dass die GROUP-BY-Klausel viele Datensätze im Vorfeld herauswirft, in denen sich auch Bewertung befinden können.


Zu Deiner anderen Frage, dass war eine Vermutung. Nur wenn Du die Bilder nach Ihrer Bewertung liesten möchtest, und die Bilder nicht doppelt vorkommen können, frage ich mich, warum Du genau keine doppelten Benutzerids haben möchtest.
Eine Ausführlichere Beschreibung wäre wirklich angebracht, was möchtest Du genau machen, und welche Daten hast Du? So komme ich eigentlich auch wieder zu meiner Vermutung, dass die Tabelle vielleicht nicht richtig normalisiert wurde auf die gewünschten Bedürfnisse (ich verstehe halt unter "vernünftig normalisiert" → den Bedürfnissen, welche an das Programm gestellt werden, am Besten entsprechend).



MfG Sascha Ahlers


--------------------
Joseph Joubert: "Der Verstand kann uns sagen, was wir unterlassen sollen. - Aber das Herz kann uns sagen, was wir tun müssen."

Sicherheit beim Programmieren: Top 10 application vulnerabilities in 2007
Top
PMEmail PosterUsers WebsiteICQ
Top
 
kova
#10 Geschrieben am: Di 21.02.2006, 13:15 (+14:34)
Report PostQuote Post

AyomRank 2
****

Gruppe: Member (aktiv)
Beiträge: 14
Mitglied seit: 13.02.2006


man kanns doch irgendwie machen das es funktioniert. Es funktioniert aber es lies nicht das höchts bewertet bild aus der datenbank.

ich weiß nicht mehr weiter was muss ich den da nun an der sql verändern das es funktioniert.
Top
PMEmail Poster
Top
 
Sascha Ahlers
#11 Geschrieben am: Di 21.02.2006, 13:56 (+00:40)
Report PostQuote Post

AyomRank 8
Group Icon

Gruppe: Experten Entwicklung
Beiträge: 1708
Mitglied seit: 27.12.2004


QUOTE (kova @ Di 21.2.2006, 13:15)
[...]
ich weiß nicht mehr weiter was muss ich den da nun an der sql verändern das es funktioniert.

Das kann ich Dir so nicht sagen, dazu bäuchte ich etwas mehr informationen als nur die Abfrage und die Struktur der Tabelle. Ich müsste schon mal ganz genau wissen, was Du machen möchtest und wieso Du unbedingt jede Benutzer-ID nur einmal innerhalb Deiner Abfrage verwerten möchtest.
Hast Du einfach mal die GROUP-BY-Klausel herausgenommen?



MfG Sascha Ahlers


--------------------
Joseph Joubert: "Der Verstand kann uns sagen, was wir unterlassen sollen. - Aber das Herz kann uns sagen, was wir tun müssen."

Sicherheit beim Programmieren: Top 10 application vulnerabilities in 2007
Top
PMEmail PosterUsers WebsiteICQ
Top
 
kova
#12 Geschrieben am: Di 21.02.2006, 14:09 (+00:13)
Report PostQuote Post

AyomRank 2
****

Gruppe: Member (aktiv)
Beiträge: 14
Mitglied seit: 13.02.2006


ich hab eine topliste auf meiner flirt seite da werden die männer von frauen unterschieden also zwei verschieden toplisten. Der gund ist warum ich nur eine benutzer-id haben will weil eine benutzer wird dann mehrmals in der topliste aufgelistet und des wäre den anderen gegenüber unfähr weil die vielleicht um 0,86 % unter den anderen benutzer liegen.

hier kannst du es sehen wie es im moment ist: Mänmliche Top 10

Top
PMEmail Poster
Top
 
kova
#13 Geschrieben am: Do 23.02.2006, 00:38 (+34:29)
Report PostQuote Post

AyomRank 2
****

Gruppe: Member (aktiv)
Beiträge: 14
Mitglied seit: 13.02.2006


wießt ihr nicht mehr weiter oder wollt ihr nicht helfen?? cool.gif
Top
PMEmail Poster
Top
 
Thema wird von 0 Benutzer(n) gelesen (0 Gäste und 0 anonyme Benutzer)
0 Mitglieder:
Trackback-Url: http://www.ayom.com/track/t/10694

Topic Options Reply to this topicStart new topicStart Poll

 





Anzeige - [Hier werben / Mediadaten]



Anzeigen


[Hier werben / Mediadaten]