PDA

Vollständige Version anzeigen : SQL fehler bei Votingsystem


XyXeNiaXyX
14.08.2001, 17:29
ich entwickle auf Dreamweaver UD 4, ASP/VB-Script und nutze Accessdatebanken. Das zur Konfiguration.

Für ein ASP Voting nutze ich folgende SQL:

SELECT COUNT (voting) as total,
(select COUNT (voting) FROM poll_table WHERE MovID = MMColVar AND voting =1) as votingyes,
(select COUNT (voting) FROM poll_table WHERE MovID = MMColVar AND voting =2) as votingno,
(select COUNT (voting) FROM poll_table WHERE MovID = MMColVar AND voting =3) as votingdunno ,INT(votingyes/total*100) AS agreecent, INT(votingno/total*100) AS disagreecent, INT(votingdunno/total*100) AS dontknowcent FROM poll_table

"MMColVar" ist ein URL Request. Ich will damit bezwecken, das nur die Datensätze gwertet werden, die alle die selbe MovID haben. Das geht auch. Nur in der ersten Zeile bei SELECT COUNT(voting) as total, kann ich den filter nicht unter bringen. Ich bekomme ständig fehler und so ist die auswertung dann immer falsch, da das Ergebnis immer durch alle abgegebenen Stimmen geteilt wird. ich habe schon folgendes versucht:

SELECT COUNT(voting) FROM poll_tab WHERE MovID = MMColVar as total,

und

SELECT COUNT(voting) as total FROM poll_tab WHERE MovID = MMColVar,

Aber da bekomme ich sofort einen undefinierbaren fehler. Der kommt aber nur dann, wenn der ganze rest der SQL darunter steht. also muß es was damit zu tun haben, das es nur in dem zusammenhang mit den anderen select abfragen nicht klappt. Einzeln klappt es nämlich. Bitte helft mir und sagt wie ich den Count(voting) filtern kann genau so, wie ich die darunter befindlichen abfragen filtere.

Die Accesstabelle enthält nur zwei Spalten.

MovID und voting. Voting bekommt immer einen wert zwischen 1 und 3 und MovID hat immer eine Zahl entsprechend der Beiträge für welche das Voting ist. So will ich eben sicherstellen, das doe Vodingdaten immer nur einen bestimmten beitrag erreichen. Also alle mit der MovID 3 zum Beispiel.

In aktion kann man sich das ganze unter www.zobel-webart.com (http://www.zobel-webart.com) ansehen. Dort in die Kinodatenbank und dann einen Film wählen. Ihr werdet sehen, das die Votings zwar bei jeden Film unterschiedlich sind, aber die ergebnisse sind falsch, da eben bei jedem Voting immer durch alle stimmen geteilt wird und nicht durch die stimmen, deren MovID dem beitrag entspricht.

Ich bin für jede Hilfe dabkbar.

Joachim Hofmann
17.08.2001, 12:29
Hallo XyXeNiaXyX,


> SELECT COUNT (voting) as total,
> (select COUNT (voting) FROM poll_table WHERE MovID = MMColVar AND voting =1) as votingyes,
> (select COUNT (voting) FROM poll_table WHERE MovID = MMColVar AND voting =2) as votingno,
> (select COUNT (voting) FROM poll_table WHERE MovID = MMColVar AND voting =3) as votingdunno,
> INT(votingyes/total*100) AS agreecent,
> INT(votingno/total*100) AS disagreecent,
> INT(votingdunno/total*100) AS dontknowcent FROM poll_table


SELECT COUNT (voting) as total,
...
INT(votingyes/total*100) AS agreecent,
INT(votingno/total*100) AS disagreecent,
INT(votingdunno/total*100) AS dontknowcent FROM poll_table

So geht es nicht. Bei einem COUNT muß Du GROUP BY nach einer bestimmten Spalte machen.
Falls innerhalb *einer Zusammengefaßten Count-Zeile* (voting) mehrere Verschiedene votingyes/Nos stehen (das wird wohl der Fall sein), gibt es keinen eindeutigen Wert dafür.
So gehts also leider nicht. Entweder Gruppieren oder yes/no ausgeben. Die Abfrage müßte mehr durchdacht und eventuell in einzelne Schritte aufgegliedert werden.

(Hab leider im Moment keine Zeit, um mir mehr damit den Kopf zu zerbröseln).

(*FERNER* gehts so nicht, schätze ich) :
(select COUNT (voting) FROM poll_table WHERE MovID = MMColVar AND voting =1) as votingyes
(sonder höchsens so)
(select COUNT (voting) as votingyes FROM poll_table WHERE MovID = MMColVar AND voting =1)