WN

WN (https://www.wn.se/forum/index.php)
-   Serversidans teknologier (https://www.wn.se/forum/forumdisplay.php?f=4)
-   -   MySQL count & inte räkna duplicates (https://www.wn.se/forum/showthread.php?t=1050475)

Kimppa 2011-10-15 17:38

MySQL count & inte räkna duplicates
 
Hej,

Bygger ett litet röstningssystem.

Tabell:
ID | IP |

Försöker räkna ihop hur många gånger ID #1 finns i en tabell och gruppera
det via IP address så att inte dubbla röster visas. Får inte riktigt till mysql-
satsen. Det finns två stycken poster med ID #1, från samma IP och den visar
fortfarande siffra 2 i printen.

Någon som kan ge mig lite vägledning?

Citat:

$countquery = 'SELECT COUNT(*) FROM votes WHERE id = 1 GROUP BY ip';

$resultcount = mysql_query($countquery) or die('Sorry, we could not count the number of results: ' . mysql_error());

$numberofresults = mysql_result($resultcount, 0);

print $numberofresults;
Tack!

Kekke 2011-10-15 17:44

SELECT COUNT(DISTINCT ip) FROM votes WHERE id=1

Kimppa 2011-10-15 17:48

Tack så mycket Kekke!

Kimppa 2011-10-15 20:27

En till fråga. Trodde jag fått det att fungerat men den räknar inte mer än +1 och inte mindre än -1...

Citat:

$tuquery = 'SELECT EXISTS(SELECT COUNT(DISTINCT ip) FROM votes WHERE itemid = '.$id.' AND voteyes="1" GROUP BY ip)';
$turc = mysql_query($tuquery) or die('Sorry, we could not count the number of results: ' . mysql_error());
$howmany_yesvotes = mysql_result($turc, 0);

print $howmany_yesvotes;
Hur många som har röstat på Yes så förblir det ändå bara +1 istället för +2 om två har röstat från olika ip-adresser.

Kimppa 2011-10-15 20:42

Klurade ut det! Tack ändå!

BjörnJ 2011-10-25 21:17

Annars kan man se till att samma IP inte kan finnas mer än en gång i databasen. Sätt UNIQUE eller PRIMARY på IP-kolumnen (eventuellt tillsammans med en annan kolumn). Om man vill kan man göra UPDATE i de fall IP-adressen redan finns i databasen.

Kekke 2011-10-25 21:26

Citat:

Ursprungligen postat av BjörnJ (Inlägg 20421503)
Annars kan man se till att samma IP inte kan finnas mer än en gång i databasen. Sätt UNIQUE eller PRIMARY på IP-kolumnen (eventuellt tillsammans med en annan kolumn). Om man vill kan man göra UPDATE i de fall IP-adressen redan finns i databasen.

Har man möjlighet att rösta på flera olika 'poster' så funkar detta ej.
Men däremot kan man när man lägger in query'n, se till så att det bara finns 1 ip per unik post.

najk 2011-10-26 07:52

Citat:

Ursprungligen postat av Kekke (Inlägg 20421505)
Har man möjlighet att rösta på flera olika 'poster' så funkar detta ej.

Jo, det är klart det fungerar =) Gör precis som BjörnJ säger, lägg en UNIQUE på ip tillsammans med itemid.

Kimppa 2011-10-26 13:15

Hej!

Det var precis det jag gjorde istället! Hade en dum idé först och det var att låta besökaren
rösta på samma flera gånger men att bara 1 röst visas ändå. Så gjorde om det så att bara
det går att rösta om det inte redan finns en IP på den IDn.

Blev lättare så :)

Kekke 2011-10-26 13:47

Citat:

Ursprungligen postat av najk (Inlägg 20421549)
Jo, det är klart det fungerar =) Gör precis som BjörnJ säger, lägg en UNIQUE på ip tillsammans med itemid.

Fel av mig :-)


Alla tider är GMT +2. Klockan är nu 14:17.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson