30. maj 2007 - 13:19Der er
5 kommentarer og 1 løsning
Brug af kommasep. liste i IN() function
Hvorfor får jeg kun resultatet for den første værdi i FaultGroup:
FaultGroup = "1,2,3,4,5"
SELECT SUM(rawdata.TimeFailure) AS faulttime, SUM(rawdata.CntFailure) AS failure FROM rawdata WHERE rawdata.DataPointIndex IN(SELECT FaultGroup FROM faultgroup WHERE ID = 1) AND sTimeStamp BETWEEN '2007-05-30 10:00:00' AND '2007-05-30 11:00:00' GROUP BY rawdata.DataPointIndex ORDER BY faulttime DESC
Er der en måde man kan konvertere strengen FaultGroup, så den bliver en del af query´et ?
Det er for det første dårlig brug af database, at have en kommasepararet liste i et felt, hvis du skal kunne slå op i det. Det er faktisk lige omkring direkte tåbeligt :)
Derudover vil du kunne gøre det med noget regexp:
SELECT SUM(rawdata.TimeFailure) AS faulttime, SUM(rawdata.CntFailure) AS failure FROM rawdata WHERE (SELECT FaultGroup FROM faultgroup WHERE ID = 1) RLIKE CONCAT('(^|,)',rawdata.DataPointIndex,'($|,)') AND sTimeStamp BETWEEN '2007-05-30 10:00:00' AND '2007-05-30 11:00:00' GROUP BY rawdata.DataPointIndex ORDER BY faulttime DESC
Ja, det er noget rod, men sådan går det, når man har lavet noget rod :)
Det eneste jeg bruger listen til er at fortælle mig en række fejlpunkter, jeg skal bruge, jeg skal ikke søge eller gøre noget som helst ved listen. Så om det er noget rod det ved jeg ikke.
Grunden til jeg spørger, er fordi jeg lige nu bruger det når jeg generere kaldet fra en website, hvor det virker ganske fint, men jeg kan åbentbart ikke smide listen i en variabel i en procedure og bruge det.
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.