webForumDet fria alternativet

mysql_num_rows();

PHP

7 svar · 350 visningar · startad av Kenchu

Medlem sedan apr. 2004113 inlägg
Frågan#1

Hej!

Sitter och pillar med en liten "frågeformulärssida", dvs en sida där besökarna kan svara på frågor, som sparas i en databas, varefter statistik skrivs ut. Men jag behöver lite hjälp med det här! Vet inte riktigt hur jag ska gå tillväga med det hela.

Visst, sjävlaste formulären bör inte vara något problem med INSERT och allt, men sjävlaste statistiken? Hmmmm.... Låt oss säga, för att dra ett exempel, att en tabell har 9 fält. Jag vill välja antalet rader i ett fält där inlägget är alt1, och jämföra det talet med det totala i det fältet, för att få ett procentantal. I vanliga fall kanske det skulle se ut såhär:


"SELECT fält1 FROM tabell WHERE fält1='alt1'"
"SELECT fält1 FROM tabell"

.... och sedan köra en numrows på båda, och jämföra dem med varandra (numrows på den första select-satsen, delat på den andra, i princip...). Med den siffra jag får fram kan jag sedan göra en HTML-tabell som visar statistiken. Men att lösa det på det här viset lär ju inte gå särskilt snabbt om man har 9 fält. Så, min fråga är:

Kan man välja hela tabellen (

"SELECT * FROM tabell"

), och sedan utifrån det göra små num_rows på något vis. Kan man det?

Kanske finns det något bättre vis att lösa det här på, vad vet jag. Hjälp behöver jag i varje fall.

Tack tack...

Medlem sedan juni 200032 967 inlägg
#2

Gör jobbet direkt i SQL-frågan istället:

SELECT fält1, count(*) FROM tabell GROUP BY fält1

Men inte har du väl ett fält per fråge- eller svarsalternativ? Vad är det för 9 fält du har i tabellen?

Medlem sedan apr. 2004113 inlägg
#3

@nders,
kan man göra på något annat sätt, än att ha ett fält per fråga? Just nu hade jag tänkt mig ha ett fält per fråga (dvs inte per svarsalternativ, bara per fråga).

Fint med count! Något nytt för mig. Hur gör man när man skriver ut siffran? echo $row["fält1"]?

Medlem sedan mars 20032 667 inlägg
#4

Varje fråga bör lagras som en egen post i en tabell. Likaså svarsalternativen i en andra tabell. ;)

Medlem sedan mars 20034 471 inlägg
#5

K@llen skrev:

Varje fråga bör lagras som en egen post i en tabell. Likaså svarsalternativen i en andra tabell. ;)

Alltså:

Fråga (Fnr, frågan, ... )
Svar (Snr, svar, Fnr, ...)

där Fnr i Svar anger vilken fråga som svaret hör till. (Under förutsättning att varje svar bara hör till EN fråga.) Annars blir strukturen annorlunda.

Medlem sedan apr. 2004113 inlägg
#6

Jag förstår databas/tabell-strukturen, men fortfarande förstår jag inte hur sjävla resultatet skall skrivas ut. Om man nu väljer alla inlägg i tbl_svar, hur ska man då gå tillväga för att räkna varje slags svar? Om det tex finns en fråga, och 5 olika svarsalternativ, hur kan jag då välja alla svarsalternativen, sortera dem, och räkna dem, med endast en mysql-sats?

Medlem sedan mars 20034 471 inlägg
#7

Givet:
Fråga (Fnr, frågan, ... )
Svar (Snr, svar, Fnr, ...)

SELECT F.Fnr, F.frågan, count(Snr) as antal FROM Fråga F, Svar S
WHERE F.Fnr = S.Fnr
GROUP BY F.Fnr;

Räknar ut antalet svar/fråga.

Medlem sedan apr. 2004113 inlägg
#8

alltså, ni får ursäkta, men det är en sak till jag skulle vilja veta.

Om jag vill räkna ut procentantalet för, låt oss säga, alla svar med svaret = 1, hur gör jag då? (speciellt svar/alla svar)

Alltså, något i den här stilen:

SELECT ((count(svar=1)/count(*))*100) as procentantal
FROM svar

Ja, jag tror ni fattar. :) Vet inte riktigt hur jag ska göra. När man använder WHERE svar=1 väljer den ju bara just den raden, så det blir lite fel. ^^

btw. aasah, snyggt! Men hur kan man få med allt jag beskrev ovan i en sats?

259 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
125 ms — deklarationer (db)
0 ms — hämta statistik (cache)
131 ms — hämta tråd, inlägg och bilagor (db)
122 ms — ändringar (db)