Hej!
Har en tabell med namn på olika tjänster och en tabell med olika varianter av denna tjänst. Jag vill ha ut namnet på tjänsten och dess tillhörande varianter efter varann.
Har följande sql-fråga:
SELECT service.*, service_info.* FROM service LEFT JOIN service_info ON service.service_id = service_info.service_id WHERE service.cal_id=".$cal_id." ORDER BY service.service_id DESC
Jag tänker flytta tillbaka till PHP - eftersom presentationen ska lösas där, inte i SQL.
Du får sätta en kontrollvariabel i php för att hålla koll på den senaste servicename du skrivit ut. Är servicename samma i den här iterationen, skriv inte ut det, skriv bara ut tiden. Är servicename ett annat, skriv ut det och sätt om kontrollvariabeln för senaste servicename.
SELECT service.*, service_info.*, GROUP_CONCAT(service_info.time_consumption SEPARATOR ',') AS time_consumption_c
FROM service
LEFT JOIN service_info ON service.service_id = service_info.service_id
WHERE service.cal_id=".$cal_id."
GROUP BY service.service_id
ORDER BY service.service_id DESC
GROUP BY grupperar ihop alla rader med samma service_id till en rad. concat_ws är en aggregatfunktion, ungefär som sum, som gör något med ihopgcupperade rader. Just concat_ws fogar samman alla raderna till en lång sträng. I detta fall har jag angivit att strängarna ska separeras med ett komma.
Det finns många klurigheter i MySQL - tydligen. :)
Jag kan dock ändå tycka att det bör lösas i php - eftersom man inte bör lösa presentationsproblem i SQL-frågor.
Snabel-anders: Strikt sett så har jag ju inte löst presentationsproblemet i SQL. Jag gör eventuellt datat lättare/mer logiskt att hantera, men det är inte nödvändigtvis samma sak som att det är presentationen manfixar. Jag fogar samman numren med en separator. Först i PHP bryr jag mig om presentationen efter att jag har delat upp strängen till en array. Hårklyveri kanske, men jag kunde ju lika gärna kört '<br />' som separator direkt. Dock blev det fel funktionsnamn i SQL-koden. Bäst att jag fixar det snabbt så att ingen får reda på att jag skrev fel.
Snabel-anders: Strikt sett så har jag ju inte löst presentationsproblemet i SQL. Jag gör eventuellt datat lättare/mer logiskt att hantera, men det är inte nödvändigtvis samma sak som att det är presentationen manfixar.