Avatar billede killel Nybegynder
03. maj 2012 - 15:47 Der er 10 kommentarer og
1 løsning

Udtræk fra MySQL returnere "forkerte" værdier

Hej,

Jeg forsøgte, at lægge nedenstående fejlkoder sammen hvor værdierne er = A - men da jeg fik nogle andre værdier end forventet, forsøgte jeg at trække værdierne ud for hver enkelt fejlkode for at få syn for sagen.

Når jeg kører nedenstående kode:

SELECT
count(`fejl1`),
count(`fejl2`),
count(`fejl3`)
FROM `data`

WHERE
`fejl1`='A' OR
`fejl2`='A' OR
`fejl3`='A'

får jeg følgende resultater:
fejl1= 98
fejl2= 15
fejl3= 39

Fejl1 er rigtig nok 98, men jeg ved at fejl2, fejl3 ikke har nogle værdier som er lig A - de har derimod værdier på hhv. 15 og 39 som er lig B i de 98 (af ca. 2000) rækker som bliver trukket ud.

Hvis jeg kører nedenstående udtræk:
SELECT
count(`fejl2`),
count(`fejl3`)
FROM `data`

WHERE
`fejl2`='A' OR
`fejl3`='A'

får jeg følgende resultater:
fejl2= 0
fejl3= 0

Hvilket er rigtigt.
03. maj 2012 - 16:48 #1
Hvis du vil have antal fejl1 hvor fejl1 = A og antal fejl2 hvor fejl2 = A og antal fejl3 hvor fejl3 = A, så virkede denne query hos mig med en testtabel jeg satte op i forbindelse med et tidliere spørgsmål:

SELECT DISTINCT (SELECT COUNT(fejlkode1) FROM data WHERE fejlkode1 = 'A') f1,
(SELECT COUNT(fejlkode2) FROM killel WHERE fejlkode2 = 'A') f2,
(SELECT COUNT(fejlkode3) FROM killel WHERE fejlkode3 = 'A') f3
FROM data
Avatar billede killel Nybegynder
03. maj 2012 - 20:18 #2
Det trækker ihvertfald dataen rigtigt ud, så mangler jeg bare lige et hint til hvordan jeg får lagt f1+f2+f3 sammen, som var min oprindelige tanke :)
03. maj 2012 - 20:35 #3
Hvad med

SELECT DISTINCT (SELECT COUNT(fejlkode1) FROM data WHERE fejlkode1 = 'A') f1,
(SELECT COUNT(fejlkode2) FROM data WHERE fejlkode2 = 'A') f2,
(SELECT COUNT(fejlkode3) FROM data WHERE fejlkode3 = 'A') f3,
(SELECT f1+f2+f3) total
FROM data
Avatar billede killel Nybegynder
03. maj 2012 - 21:10 #4
Tæt på - nu får jeg værdierne for f1, f2, f3 og f1+f2+f3
03. maj 2012 - 22:27 #5
killel, jeg forstod fra dit oprindelige spørgsmål, at med den kode du viser får du ikke det rigtige antal fejl i henholdsvis fejl1, fejl2, og fejl3, hvor fejlen er A, og du søgte en løsning dertil.  Sådan en løsning foreslog jeg, og du sagde, at det gav de rigtige data.  Jeg forventede derfor, at du ville acceptere mit svar og afgive de udlovede points!

I stedet stillede du endnu et spørgsmål.  Jeg forstod, at det nye spørgsmål gik ud på at lægge de tre værdier sammen.  Så det foreslog jeg også en løsning på.  Men ikke tilfredsstillende!  Åbenbart havde jeg ikke fattet hvad du var ude efter, og i #4 fortæller du kun hvad der er forkert, ikke hvad du skulle have brugt i stedet for.

Jeg er åbenbart for dum til at forstå dig.  For at jeg ikke skal spilde mere af din tid med forkerte svar foreslår jeg, at du lukker spørgsmålet igen med points til dig selv.
Avatar billede killel Nybegynder
03. maj 2012 - 22:34 #6
Du har fået dine point og jeg skal beklage mit spørgsmål kunne misforstås, selv om jeg når jeg selv læser det ikke er i tvivl om hvad der menes, men det er selvfølgelig også mig som har stillet det :)

Mit spørgsmål gik på hvordan jeg fandt summen af fejl1+fejl2+fejl3, men da jeg fik forkerte resultater forsøgte jeg at trække dataen ud enkeltvis for at finde fejlen.
Avatar billede killel Nybegynder
03. maj 2012 - 22:37 #7
Selvfølgelig summen af fejl1+fejl2+fejl3 hvor værdierne er A....
03. maj 2012 - 22:49 #8
Hvad resultat får du ud af mit forslag #3 som er forskelligt fra hvad du søger i #7?
Avatar billede killel Nybegynder
03. maj 2012 - 22:52 #9
Forskellen er, at jeg kun skal bruge den samlede sum og altså ikke værdierne af hvert enkelt udtræk samt den samlede værdi.

Altså jeg får følgende:
f1=98
f2=0
f3=0
f1+f2+f3=98

hvor jeg kun skal bruge
f1+f2+f3=98
04. maj 2012 - 04:37 #10
Jamen så skal der vel ikke meget fantasi til at tage de elementer du har brug for og lade resten ligge -

SELECT DISTINCT (SELECT COUNT(fejl1) FROM data WHERE fejlkode1 = 'A') + (SELECT COUNT(fejl2) FROM data WHERE fejlkode2 = 'A') +
(SELECT COUNT(fejl3) FROM data WHERE fejlkode3 = 'A') total
FROM data

- meningen er vel, at det her skal være hjælp til selvhjælp.
Avatar billede killel Nybegynder
04. maj 2012 - 08:11 #11
Bestemt, jeg kunne bare ikke få det til at virke selv, men jeg kan se at det var noget med hvor ( ) skulle sættes. Det virker nu - endnu engang tak for hjælpen :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester