tjena! jag har lite problem med group_concat om det går att lösa frågan på annat snyggt sätt utan att använda group_concat är det självklart ok! Är inte säker på att detta ger det du vill, men kanske något i stil med detta? Hej thomas!mysql group_concat sortering
jag har en produkt till vilken olika attribut med alternativ är kopplade enligt:
product
--------
productguid
name
variant
-------
productguid
variantguid
articleno
attribute
---------
attributeid
name
sortorder
attributealternative
---------------------
attributealternativeid
name
sortorder
variantattributevalue
-----------------------
variantguid
attributeid
attributealternativeid
Ett attribut kan vara spelartyp, loft och ett attributalternativ kan vara t.ex. herr, dam, 22 grader, 9 grader
Genom denna struktur kan jag skapa produkter som har varianter med olika attribut.
Nu vill jag ha en sql sats som hämtar ut de varianter som finns:
Först kör jag:
select vav.*, a.NameDefault, aa.NameDefault, a.SortOrder as attributesort, aa.SortOrder as attributealtsort from VariantAttributeValue vav JOIN Attribute a ON a.AttributeId=vav.AttributeId JOIN AttributeAlternative aa ON aa.AttributeAlternativeId = vav.AttributeAlternativeId JOIN Variant v on v.VariantGuid = vav.VariantGuid WHERE v.ProductGuid = '08c7d145-1d8a-4162-adcf-62b8af9893a4' Order By a.SortOrder, aa.SortOrder
vilket ger mig resultatet
www.stefanj.se/resultat1.jpg
I detta fall har en produkt attributen: spelartyp, loft och skaft. Ordningen på attributen sätts enligt sortorder för attribute så att spelartyp kommer först, sen loft, sedan skaft. MEN jag vill därefter också sortera på attributalternativ med hjälp av dess sortorder så att 9,5 grader kommer före 12 grader
Om jag kör en group_concat:
select group_concat(aa.Name ORDER BY a.SortOrder, aa.SortOrder SEPARATOR ', ') availablein from VariantAttributeValue vav JOIN Attribute a ON a.AttributeId=vav.AttributeId JOIN AttributeAlternative aa ON aa.AttributeAlternativeId = vav.AttributeAlternativeId JOIN Variant v on v.VariantGuid = vav.VariantGuid WHERE v.ProductGuid = '08c7d145-1d8a-4162-adcf-62b8af9893a4' group by vav.VariantGuid
ger detta mig resultatet
www.stefanj.se/resultat2.jpg
Men jag vill alltså ha 9,5 grader överst.
Hur kan man lösa detta?
/Mvh
StefanSv: mysql group_concat sortering
/sSv:mysql group_concat sortering
SELECT GROUP_CONCAT(o.Name ORDER BY o.SortOrder1, o.SortOrder2 SEPARATOR ', ') availablein FROM
(
SELECT vav.VariantGuid, aa.Name, a.SortOrder SortOrder1, aa.SortOrder SortOrder2 FROM VariantAttributeValue vav
JOIN Attribute a USING (AttributeId)
JOIN AttributeAlternative aa USING (AttributeAlternativeId)
JOIN Variant v USING (VariantGuid)
WHERE v.ProductGuid = '08c7d145-1d8a-4162-adcf-62b8af9893a4'
ORDER BY SortOrder1, SortOrder2, aa.Name
) o
GROUP BY o.VariantGuid
Sv: mysql group_concat sortering
Ja något i stil med det men även här blir sorteringen inte som jag vill. Resultatet blir samma som jag får...
Om du kollar på 'resultat1.jpg' ovan så tror jag problemet beror på att 'herr höger' blir styrande på nåt sätt. Eftersom alla herr höger poster har samma attributesort (=1) så hamnar någon av dessa
först i listan, i detta fall den med guid '178f102d...'. När sedan group_concat körs så tar den den post som har attributet loft och med variantguid '178f102d...' vilket då blir loft 10,5 grader...
Men jag vill ju ha 9,5 grader först vilken har variantguid '6de34f40...'
hmmm!?!?! Ingen annan som har stött på samma grej?
/stefan