webForumDet fria alternativet

mysql_num_rows();

7 svar · 350 visningar · startad av Kenchu

KenchuMedlem sedan apr. 2004113 inlägg
#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...

@ndersMedlem sedan juni 200026 914 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?

KenchuMedlem 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"]?

K@llenMedlem sedan mars 20032 654 inlägg
#4

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

aasahMedlem sedan mars 20033 451 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.

KenchuMedlem 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?

aasahMedlem sedan mars 20033 451 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.

KenchuMedlem 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?

124 ms totalt · 3 externa anrop · cache AV · v20260731051352-full.56cc9887
0 ms — hämta statistik (cache)
0 ms — hämta forumlista (cache)
122 ms — hämta tråd, inlägg och bilagor (db)