sawMedlem sedan mars 20011 883 inlägg
JAg har en liten fin sql som i grunden fungerar bra;
[kod]
SELECT Count(Listan.Ratt) AS Antal, Listan.Ratt AS Rätt FROM Listan
GROUP BY Listan.Ratt ORDER BY Listan.Ratt DESC
[kod]
Jag får då ut ett resultat som ser ut så här:
10 = 1222
9 = 203
8 = 2200
Nu ville jag försöka att "få tag" på t ex alla som har tio rätt, och jag antar att
man bör göra det i sql:en och använda en psedonym.
Tacksam för förslag.
Jag vet att jag skulle kunna göra 10 st sql men målet är ju att kunna göra
detta i en sql.
jmeMedlem sedan maj 20011 967 inlägg
Fredde MannenMedlem sedan nov. 20013 498 inlägg
Hur ser tabellerna ut som du använder för att veta vilka som är "användare", samt tabellen för listan med antalet rätt, samt hur ser deras relation ut?
jmeMedlem sedan maj 20011 967 inlägg
sawMedlem sedan mars 20011 883 inlägg
Detta är en tabell utan relationer(Access) och består av följande fällt
id
namn
svar1
svar2 osv till svar10
Ratt
Fel
Tid
Datum
Det jag vill göra är att grafiskt visa i procent hur manga som har svarat 1 rätt,
2 rätt osv.
Som jag nämnde inledningsvis så fungerar den sql:en men jag kan ju inte
hantera de enskikkda rätten(10, 9 osv).
überfuzzMedlem sedan apr. 2006434 inlägg
Krångla inte till det så mycket. Gör en for-loop och query:a för varje antal rätt.
for ($i = 0; $i <= 10; $i++) {
query = "SELECT COUNT(något) AS antal_personer_med_poäng FROM tabell WHERE antal_rätt = '".$i."'";
//behandla queryn.
echo "Vi hade ".$query_result['antal_personer_med_poäng']." st som hade ".$i." poäng rätt.";
}
Utskriften och behandlingen av queryn är inte direkt klar, men det ger dig nog en idé om hur du kan lösa det. Tips, stoppa in resultatet i en array, så kan du jobba med den när du ska skriva ut listan.
Edit: rättade stavfel.
sawMedlem sedan mars 20011 883 inlägg
Eftersom all databashantering sker via en web service, så tänkte jag att det skulle vara dumt med många databasanrop, annars så kunde jag ju göra tio stycken...
Jag funderade på en sql ung så här:
SELECT
(
SELECT Count(Listan.Ratt) AS Antal10, Listan.Ratt AS ten
FROM Listan
GROUP BY Listan.Ratt
HAVING(Listan.Ratt)=10
)
,
(
SELECT Count(Listan.Ratt) AS Antal9, Listan.Ratt AS nine
FROM Listan
GROUP BY Listan.Ratt
HAVING(Listan.Ratt)=9
)
,
(
SELECT Count(Listan.Ratt) AS Antal8, Listan.Ratt AS eight
FROM Listan
GROUP BY Listan.Ratt
HAVING(Listan.Ratt)=8
)
,
(
SELECT Count(Listan.Ratt) AS Antal7, Listan.Ratt AS seven
FROM Listan
GROUP BY Listan.Ratt
HAVING(Listan.Ratt)=7
)
,
(
SELECT Count(Listan.Ratt) AS Antal6, Listan.Ratt AS six
FROM Listan
GROUP BY Listan.Ratt
HAVING(Listan.Ratt)=6
)
,
(
SELECT Count(Listan.Ratt) AS Antal5, Listan.Ratt AS five
FROM Listan
GROUP BY Listan.Ratt
HAVING(Listan.Ratt)=5
)
,
(
SELECT Count(Listan.Ratt) AS Antal4, Listan.Ratt AS four
FROM Listan
GROUP BY Listan.Ratt
HAVING(Listan.Ratt)=4
)
,
(
SELECT Count(Listan.Ratt) AS Antal3, Listan.Ratt AS tree
FROM Listan
GROUP BY Listan.Ratt
HAVING(Listan.Ratt)=3
)
,
(
SELECT Count(Listan.Ratt) AS Antal2, Listan.Ratt AS two
FROM Listan
GROUP BY Listan.Ratt
HAVING(Listan.Ratt)=2
)
,
(
SELECT Count(Listan.Ratt) AS Antal1, Listan.Ratt AS one
FROM Listan
GROUP BY Listan.Ratt
HAVING(Listan.Ratt)=1
)
,
(
SELECT Count(Listan.Ratt) AS Antal0, Listan.Ratt AS zero
FROM Listan
GROUP BY Listan.Ratt
HAVING(Listan.Ratt)=0
)
ORDER BY Listan.Ratt DESC;
Denna fungerar dock inte jag får syntaxfel operator saknas. Är jag ute och
cyklar?
*************************
När jag ser resultatet av mina ansträngningar så får det mig att fundera
mera på vad überfuzz skrev.
Peter SMedlem sedan dec. 20025 484 inlägg
Med din första fråga får du ju ut hur många som har 1, 2, 3, o.s.v. rätt.
Nu vill du även ta reda på hur många som svarat rätt på respektive fråga? Då får du ställa en SQL-fråga per svar:
select count(*) from listan where svar1 = true
überfuzzMedlem sedan apr. 2006434 inlägg
Peter S skrev:
select count(*) from listan where svar1 = true
Peter, den där true-grejen, jag förstår inte riktigt hur den fungerar? Måste han en binär typ på den (svar1 alltså)?
Vidare så kan jag inte så här på rak arm se hur man går från tex antal rätt på fråga ett bland alla tävlande till hur många som hade ett rätt när de tävlade.
Peter SMedlem sedan dec. 20025 484 inlägg
überfuzz skrev:
Peter, den där true-grejen, jag förstår inte riktigt hur den fungerar? Måste han en binär typ på den (svar1 alltså)?
Vidare så kan jag inte så här på rak arm se hur man går från tex antal rätt på fråga ett bland alla tävlande till hur många som hade ett rätt när de tävlade.
Jag utgick från att han sparar huruvida svaret är rätt eller inte i svarX. Det kan givetvis visa sig vara ett felaktigt antagande eftersom varken fältbeskrivning eller exempel på tabellinnehåll givits.
Om ovanstående visar sig vara ett korrekt antagande får man ju, genom att räkna alla med svar1 = true, reda på hur många som har svarat rätt på den första frågan. Hur många som totalt har 1 rätt verkar man få genom att gruppera på Ratt och utföra en count.
sawMedlem sedan mars 20011 883 inlägg
För att specifera lite mera så är det i fältet Ratt som jag har räknat hur många
rätt respektive tävlande har. I de andra fälten så har jag sparat svaren.
I dag så kanske jag tycker att denna tabellen bara behövde vara id, namn, antal_Ratt,
tid och datum, men gjort är gjort.
Peter SMedlem sedan dec. 20025 484 inlägg
Hur vet man om värdet i svarX är rätt?
sawMedlem sedan mars 20011 883 inlägg
Innan jag sparar i databasen så har jag kollat det och sedan så sammanfattar jag alla
svaren i Rätt.
Frågesporten ligger på https://www.saw.se under aktivitet/musikfrågan.
Peter SMedlem sedan dec. 20025 484 inlägg
Ja, då blir det kanske svårt att veta hur många som svarat rätt på varje fråga. Såvida du inte byter ut "true" mot något annat, statiskt värde.
sawMedlem sedan mars 20011 883 inlägg
Min sql fungerar ju och jag kan koppla den mot en gridview, men jag ville leka lite själv
med den
SELECT Count(Listan.Ratt) AS Antal, Listan.Ratt AS Rätt FROM Listan
GROUP BY Listan.Ratt ORDER BY Listan.Ratt DESC
Här ser du att jag använder listan.Ratt och sedan gruppera.
Peter SMedlem sedan dec. 20025 484 inlägg
Ja, och då får du ut hur många som haft 1, 2, 3, o.s.v. rätt.
Vad var frågan? :P
sawMedlem sedan mars 20011 883 inlägg
Jo vad jag skulle vilja är att "få tag" på t ex alla som har 10 rätt och sne nästa på 9
rätt osv för att kunna göra ett stapeldiagram.
Peter SMedlem sedan dec. 20025 484 inlägg
Alla som har 10 rätt:
select * from listan where ratt = 10
...eller allihop:
select * from listan order by ratt desc
jmeMedlem sedan maj 20011 967 inlägg
Jag skulle iaf inte köra med åäö i aliaser...
sawMedlem sedan mars 20011 883 inlägg
nja det är ju inte så lätt, då måste jag köra 10 sql:er, och det tänkte jag försöka att undvika.