ASC vs DESC. Problem med ordningen i SQL-query.

Trädvy Permalänk
Medlem
Plats
at home
Registrerad
Mar 2004

ASC vs DESC. Problem med ordningen i SQL-query.

Hejsan!

Håller på att göra en temperaturgraf i PHP/GD och står nu inför ett dilemma. Jag har mina temperaturer samt timestamps i en databas. Med hjälp av denna data skriver mitt script ut en graf som visar temperaturen vid ett visst klockslag. Grafen skall visa de tio senaste temperaturmätningarna med den äldsta längst åt vänster och den senaste längst åt höger.

Jag får dock inte riktigt ordning på min SQL-förfrågan som hämtar datan. För tillfället ser den ut såhär:

SELECT date, cputemp, chiptemp, systemp FROM temperatures ORDER BY date ASC LIMIT 10

Det blir ju inte riktigt som man tänkt sig, för här är det ju de 10 äldsta mätningarna som visas.

Använder man istället DESC så kommer ju grafen bli "baklänges" då de senaste mätningarna visas först (dvs till vänster) och de äldsta sist (dvs till höger).

Jag vill ju ha de 10 senaste mätningarna och dessa 10 skall vara ASC.

Det skulle ju gå att göra en fulfix i php, men jag tycker att det borde gå fint att göra i min SQL-query. Kanske har jag bara fått ett mindre hjärnsläpp?

Värt att tillägga kan ju vara att jag kör MySQL.

Tackar / Crazzir

Asus P8P67 Pro | Core i7 2600 | Sapphire Radeon R9 290 | A-DATA SSD 510

Trädvy Permalänk
Medlem
Plats
Bromma
Registrerad
Aug 2008

Är inte så insatt i sql men har för mig att man kan skriva något sånt här?:

SELECT * from (SELECT date, cputemp, chiptemp, systemp FROM temperatures ORDER BY date DESC LIMIT 10 ) order by date ASC

Asus Striker II Extreme / XFX Geforce GTX 280 / Q9450 @ 3.6GHz/ TRUE Noctua 120/ 4x1GB Corsair TWIN3X2048-1333C9DHX / X25-M G2 80gb Velociraptor / Win 7 Ultimate x64/ Antec P190

MovieDatabase

Trädvy Permalänk
Medlem
Registrerad
Jul 2004

Skulle precis skriva det.. Så två personer borde väl kunna ha rätt?

Trädvy Permalänk
Medlem
Plats
Landvetter
Registrerad
Okt 2001

edit: det funka visst, läste felmeddelandet dåligt
man behövde dock slänga in ett alias för den temporära tabellen...

SELECT * from (SELECT date, cputemp, chiptemp, systemp FROM temperatures ORDER BY date DESC LIMIT 10 ) as TMP order by date ASC;

Jag fick inte det att funka på min server (den verkar inte gilla limit i subqueries) , ett alternativ är att skapa en view:

CREATE VIEW viewname AS SELECT * FROM temperatures ORDER BY date DESC LIMIT 10;

och sen hämta från den viewn

SELECT * FROM viewname ORDER BY date ASC;

kanske inte så effektivt, men verkar funka

Trädvy Permalänk
Medlem
Plats
at home
Registrerad
Mar 2004
Citat:

Ursprungligen inskrivet av Spannen
Jag fick inte det att funka på min server (den verkar inte gilla limit i subqueries) , ett alternativ är att skapa en view:

CREATE VIEW viewname AS SELECT * FROM temperatures ORDER BY date DESC LIMIT 10;

och sen hämta från den viewn

SELECT * FROM viewname ORDER BY date ASC;

kanske inte så effektivt, men verkar funka

Fick inte heller det att fungera ordentligt. Men jag kom på att jag lika gärna kan fixa det i PHP. Det var visst rätt enkelt att göra då det endast var att ändra en for-loop så den räknar ner istället för upp.

Intressant med view. Skall kolla upp det lite närmre, kanske kan det hjälpa mig att effektivisera min temperaturgraf.

Tack så mycket allihop.
/Crazzir

Asus P8P67 Pro | Core i7 2600 | Sapphire Radeon R9 290 | A-DATA SSD 510