[MySQL] Select last record met CASE/IF statement

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • ZeroXT
  • Registratie: December 2007
  • Laatst online: 17:39
Ik probeer de laatste record te selecteren wanneer deze aanwezig is. Wanneer er nog geen record bestaat moet deze 0 retourneren. Dit probeer ik te bereiken met de onderstaande query (versimpeld):
code:
1
2
3
4
5
6
7
8
SELECT
    CASE WHEN count(*) = 0 THEN "0" ELSE id END
FROM
    tablename
ORDER BY 
    id DESC 
LIMIT 
    1


Op de een of andere manier krijg ik altijd de eerste record terug en niet de laatste. Ik heb Google al geraadpleegd, maar kwam er niet uit helaas. De "fout" zit in de CASE WHEN regel.

Deze heb ik al omgezet naar een IF statement maar met hetzelfde resultaat.

Wanneer ik SELECT id gebruik, krijg ik wel de gewenste resultaat maar dan wordt er geen 0 geretourneerd wanneer er geen records aanwezig zijn.

Iemand enig idee? :)

[ Voor 7% gewijzigd door ZeroXT op 23-10-2014 14:02 ]


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Je kunt geen count gebruiken op die manier; je zult een subquery moeten gebruiken a-la:

SQL:
1
2
3
SELECT
    CASE WHEN (select count(*) from tablename) = 0 THEN "0" ELSE id END
...


Even aangenomen dat id een int (of bigint o.i.d.) is; waarom return je dan "0" (varchar) in het andere geval?

En los van dat alles: ik zou 't gewoon aan de applicatielogica overlaten (geen records-> doe X, wel records -> doe Y) of iets doen als:
SQL:
1
2
SELECT Coalesce(Max(id),0) as id
FROM tablename


Lang verhaal kort; ik vind 't maar een beetje een ranzige constructie die je nu hebt :X

[ Voor 56% gewijzigd door RobIII op 23-10-2014 14:10 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • adis
  • Registratie: November 2012
  • Laatst online: 24-02 21:45
Bedoel je iets zoals:

SQL:
1
2
SELECT IFNULL(MAX(id), 0) AS latestRecord
FROM tableName


Dit levert bij een 0 op bij een lege table en anders de hoogste id.

[ Voor 35% gewijzigd door adis op 23-10-2014 14:07 ]


Acties:
  • 0 Henk 'm!

  • Tribits
  • Registratie: Augustus 2011
  • Laatst online: 17-07 14:53

Tribits

Onkruid vergaat niet

RobIII schreef op donderdag 23 oktober 2014 @ 14:06:
...
Lang verhaal kort; ik vind 't maar een beetje een ranzige constructie die je nu hebt :X
Mee eens, en dan hebben we het er nog maar niet over dat sorteren op ID eigenlijk een absolute no-go is.

[ Voor 11% gewijzigd door Tribits op 23-10-2014 22:26 ]

Master of questionable victories and sheer glorious defeats