WN

WN (https://www.wn.se/forum/index.php)
-   Serversidans teknologier (https://www.wn.se/forum/forumdisplay.php?f=4)
-   -   Listning av förslag på namn (https://www.wn.se/forum/showthread.php?t=1039588)

vidir 2009-12-13 12:27

Listning av förslag på namn
 
Hej!

jag har en php nominerings funktion som jag försöker laga.

Nu på visningssidan när jag listar upp nomineringarna ser det ut så här

Per
Kalle
Johan
Melissa
Andrea
Per
Per
Kalle
Johan
Melissa
melissa

Listan är lång och rörig :D

skulle vilja få det se ut såhär istället

Per
Kalle
Andrea
Per (2)
Kalle
Johan (2)
Melissa (2)

Om ett namn nomineras fler gånger upprepas inte namnet utan bara (antalet)

Vor hemskt tacksam för tips, eller vad en sådan funktion kallas så att man vet vad man skall googla efter.

qson 2009-12-13 12:34

Om du hämtar info från MySQL kan du använda COUNT(*) och "GROUP BY namn".

Info: http://dev.mysql.com/doc/refman/5.0/...functions.html

Magnus_A 2009-12-13 13:16

Citat:

Ursprungligen postat av vidir (Inlägg 20335313)
Hej!

jag har en php nominerings funktion som jag försöker laga.

Nu på visningssidan när jag listar upp nomineringarna ser det ut så här

Per
Kalle
Johan
Melissa
Andrea
Per
Per
Kalle
Johan
Melissa
melissa

Listan är lång och rörig :D

skulle vilja få det se ut såhär istället

Per
Kalle
Andrea
Per (2)
Kalle
Johan (2)
Melissa (2)

Om ett namn nomineras fler gånger upprepas inte namnet utan bara (antalet)

Vor hemskt tacksam för tips, eller vad en sådan funktion kallas så att man vet vad man skall googla efter.

Det där var ingen större förbättring.
Vill du inte hellre att det ser ut så här:
Citat:

Andrea
Johan (2)
Kalle (2)
Melissa (3)
Per (3)
Alltså en(1) rad per namn, följt av totalt antal.
Vill du sortera efter namn eller antal nomineringar?
Som tidigare påpekats är det en barnlek om det är mysql och varje nominering ligger på en rad,
typ:
Citat:

select namn, count(namn) as antal from tabell group by namn order by [namn|antal desc]
Annars får du berätta hur du lagrar dina data idag. Vill du hantera olika stavningar som melissa/Melissa så blir det krångligare men inte omöjligt.

vidir 2009-12-13 13:55

tack för tipsen,,

db´ns tabeller är bara id och namn

<?
include("include/db_conn.php");
$xklo = "SELECT * FROM lista ORDER by id desc";
$xlop = mysql_query($xklo);
while($ras = mysql_fetch_array($xlop)) {
$namn = $ras["namn"];
?>

<?=$namn?> <br>

<?
}
?>

testar just nu med count som ovanstående men då visa ingenting :D, men jag vet iaf att det heter count() och måste bara lära mig detta..

åter,, tusen tack för tipsen.

tartareandesire 2009-12-13 15:06

Hur ser din kod ut när du använder count?

vidir 2009-12-13 21:44

Hej!

jag hann inte testa långt med annat än
$xklo = "SELECT COUNT(*) FROM lista GROUP BY namn ORDER by id desc";
....... sedan dog internet i hela området... jag har ingen aning om jag lyckas med detta men skall försöka leka med deta under veckan :D

tartareandesire 2009-12-14 00:06

Citat:

Ursprungligen postat av vidir (Inlägg 20335364)
Hej!

jag hann inte testa långt med annat än
$xklo = "SELECT COUNT(*) FROM lista GROUP BY namn ORDER by id desc";
....... sedan dog internet i hela området... jag har ingen aning om jag lyckas med detta men skall försöka leka med deta under veckan :D

Du måste välja namn också om du vill skriva ut detta :)

BjörnJ 2009-12-14 02:11

Något i den här stilen:
INSERT INTO nomineringar (namn,antal) VALUES ("$namn",1) ON DUPLICATE KEY UPDATE antal=antal+1;

namn-kolumnen ska vara unique eller primary.
Tänk på att $namn måste vara säkrad mot SQL injection.
Kanske formatera $namn först så gemener/versaler blir rätt.

Edit:
Man kanske även borde ha någon kontroll så att inte samma person kan nominera flera gånger. Eller att samma person får nominera flera olika personer, men högst en nominering per nominerad person. I det senare fallet får man nog titta på någon annan lösning än ON DUPLICATE KEY. I det första fallet kan man sätta en flagga i någon annan tabell när personen har använt sin nominering.

allstars 2009-12-14 09:04

Citat:

Ursprungligen postat av vidir (Inlägg 20335364)
Hej!

jag hann inte testa långt med annat än
$xklo = "SELECT COUNT(*) FROM lista GROUP BY namn ORDER by id desc";
....... sedan dog internet i hela området... jag har ingen aning om jag lyckas med detta men skall försöka leka med deta under veckan :D

Jag hade gjort så här:
SELECT COUNT(Id) AS `antal`, Namn FROM Lista GROUP BY namn ORDER By Namn ASC

Kollat av "namn" om den är skiljt från 1 och då skriva ut antalet efter namnet.

vidir 2009-12-14 15:41

Tack allihop, det löste sig. Allstars, jag använde din lösning "SELECT COUNT(Id) AS `antal`, Namn FROM Lista GROUP BY namn ORDER By Namn ASC" det löste det för denna gång nomineringen hade liksom redan börjat och nu får man bättre vy av alla namn men nästa gång blir det filtrering av A a samt göra tabell unique eller primary som BjörnJ tipsade om.

Tusen tack!


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

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