For litt siden kom noen til meg over MSN og lurte på hvordan de kunne bruke GROUP_CONCAT() men bare implodere de 3 nyeste (høyest ID). Og dette ville han da gjøre uten noen loop som helst. Jeg sier til han at han burde bruke PHPs implode()-funksjon, men det ville han visst ikke. MySQL skal vel egentlig ikke brukes til å manipulere date, men heller til å håndtere/deligere/lagre innhold (data).
Uansett tenkte jeg at løsningen måtte være å bruke en subquery, hvor man sjekket at id var i id-ene som ble plukket ut av subqueriet. Nyere versjoner støtter ikke å bruke IN/ALL/ANY/SOME til subqueries i WHERE-clause, så da er løsningen ganske selvsigende.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | SELECT GROUP_CONCAT( a.id ORDER BY a.id DESC SEPARATOR ', ' ) as imploded_idfield FROM myField a INNER JOIN ( SELECT id FROM myField ORDER BY id DESC -- [WHERE ... ] LIMIT 3 ) b ON a.id = b.id |
Da har vi alle de imploderte verdiene i imploded_idfield, og kan se ut noe som
“300, 299, 298″