Fetstil Fetstil Kursiv Understrykning linje färgläggning tabellverk Punktlista Nummerlista Vänster Centrerat högerställt Utfyllt Länk Bild htmlmode
  • Forum & Blog
    • Forum - översikt
      • .Net
        • asp.net generellt
        • c#
        • vb.net
        • f#
        • silverlight
        • microsoft surface
        • visual studio .net
      • databaser
        • sql-server
        • databaser
        • access
        • mysql
      • mjukvara klient
        • datorer och komponenter
        • nätverk, lan/wan
        • operativsystem
        • programvaror
        • säkerhet, inställningar
        • windows server
        • allmänt
        • crystal reports
        • exchange/outlook
        • microsoft office
      • mjukvara server
        • active directory
        • biztalk
        • exchange
        • linux
        • sharepoint
        • webbservers
        • sql server
      • appar (win/mobil)
      • programspråk
        • c++
        • delphi
        • java
        • quick basic
        • visual basic
      • scripting
        • asp 3.0
        • flash actionscript
        • html css
        • javascript
        • php
        • regular expresssion
        • xml
      • spel och grafik
        • DirectX
        • Spel och grafik
      • ledning
        • Arkitektur
        • Systemutveckling
        • krav och test
        • projektledning
        • ledningsfrågor
      • vb-sektioner
        • activeX
        • windows api
        • elektronik
        • internet
        • komponenter
        • nätverk
        • operativsystem
      • övriga forum
        • arbete karriär
        • erbjuda uppdrag och tjänster
        • juridiska frågor
        • köp och sälj
        • matematik och fysik
        • intern information
        • skrivklåda
        • webb-operatörer
    • Posta inlägg i forumet
    • Chatta med andra
  • Konto
    • Medlemssida
    • Byta lösenord
    • Bli bonsumedlem
    • iMail
  • Material
    • Tips & tricks
    • Artiklar
    • Programarkiv
  • JOBB
  • Student
    • Studentlicenser
  • KONTAKT
    • Om pellesoft
    • Grundare
    • Kontakta oss
    • Annonsering
    • Partners
    • Felanmälan
  • Logga in

Hem / Forum översikt / inlägg

Posta nytt inlägg


datastruktur och sqlfråga

Postades av 2009-06-02 23:25:15 - Stefan Johansson, i forum databaser, Tråden har 3 Kommentarer och lästs av 2069 personer

hej!

jag har ett system (mysql) där en produkt kan ha flera varianter. Varianter baseras på attribut som t.ex. storlek och färg och därför har jag en tabell som länkar attribut till en viss produkt (productattributelink) och som används i admingränssnittet för att när en ny variant av en produkt skapas säga till användaren att välja t.ex. vilken färg en viss variant har.

Attributen har alternativ som t.ex. small, medium, grön blå och för att länka vilka alternativ som gäller för en viss variant har jag en länktabell variantattributevalue som länkar ihop en variant till de attribut som ska finnas och attributens värden.

Första frågan: Är denna struktur lämplig?

product
--------
productguid
name

variant
--------
productguid
variantguid
name

productattributelink
----------------------
productguid
attributeid (t.ex. färg)

variantattributevalue
-----------------------
variantguid
attributeid (t.ex. färg)
attributealternativeid (t.ex. grön)

attribute
---------
attributeid
name (t.ex. färg, storlek)

attributealternative
-------------------
attributealternativeid
attributeid
name (t.ex. small, medium)

Andra frågan: Jag vill genom sökning hämta ut en lista över varianter med de attribut och attributens värden som är inlagda för en viss produkt, alltså något i stil med:

SELECT cart.ShoppingcartGuid, cart.ProductGuid, cart.VariantGuid, cart.Quantity, cart.DateAdded, p.NameDefault, p.Sellout, v.ArticleNo, t.TaxPercentage, v.Price, v.PriceRecommended, v.PriceSellout, (SELECT GROUP_CONCAT(a.NameDefault, ': ',aa.NameDefault, '<br/>' SEPARATOR '') FROM VariantAttributeValue vav JOIN Attribute a ON a.AttributeId = vav.AttributeId JOIN AttributeAlternative aa ON aa.AttributeAlternativeId = vav.AttributeAlternativeId WHERE vav.VariantGuid = cart.VariantGuid) AS VariantAttributesAndValues FROM ShoppingcartItem cart JOIN Product p ON p.ProductGuid = cart.ProductGuid JOIN Variant v ON v.VariantGuid = cart.VariantGuid JOIN Tax t ON t.TaxId = v.TaxId WHERE cart.ShoppingcartGuid=pShoppingcartGuid ORDER BY p.NameDefault;

Där den inre select satsen kör en group_concat.

MEN! i de fall man lagt in att en produkt ska ha attributen färg och storlek men endast attributet färg har ett värde så kommer inte storlek att synas i denna hämtning, jag vill att båda attributen ska synas men i de fall då ett visst attribut inte har ett värde vill jag ändå att det ska synas fast med texten not selected...

Situationen uppstår normalt inte eftersom det är ett felaktigt "state", men det kan hända om man t.ex. väljer att lägga till ett attribut till en produkt som redan finns utan att uppdatera produktens varianter...

Kanske ett lyxproblem....

/mvh stefan


Svara

Sv: datastruktur och sqlfråga

Postades av 2009-06-03 00:16:17 - Daniel Svalefelt

Hej!

Strukturen ser vettig ut. Eftersom attributalternativ har en länk till attribut kanske du inte behöver ha en länk från variantattributevale till attributeid tycker jag, men jag kan miss nått. Om du vill kunna ha attributet satt ,men attributealtenative null. Jag antar att det är det som är problemet i fråga två.


Jag tycker att problemet borde lösas, om jag förstår problemet rätt, med att byta ut joinen till AttributeAlternative mot en "left outer join". Då får du ett en rad även om inte AttributeAlternativ är satt.


/Svalan


Svara

Sv:datastruktur och sqlfråga

Postades av 2009-06-03 15:48:37 - Stefan Johansson

Hej!

Tack för responsen.

Den länken behövs inte egentligen. Sant. Men den gör att jag inte behöver joina attributealternativeid tabellen för att få reda på attributeid... så skulle gå att ta bort men den är bekväm :)

Left outer join skulle funka om det fanns en post i variantattributevalue tabellen men så är inte fallet om just det attributet inte är valt för en viss variant...

/stefan



Svara

Sv: datastruktur och sqlfråga

Postades av 2009-06-04 09:10:50 - Daniel Svalefelt

Ok. Missade det.

Då får du basera den innere frågan på datan i Attribute och AttributeAlternativ istället,
och se VariantAttributeValue något som du joinar in om det finns.

Så, om jag förstår strukturen rätt så får du länka in denna ordningen:

From productattributelink
JOIN Attribute
JOIN AttributeAlternative
Left outer join VariantAttributeValue

Då borde du allt få med alla attribut, men få null om VariantAttributeValue saknas.

/Svalan


Svara

Nyligen

  • 18:42 Hvor finder man håndlavede lamper
  • 18:41 Hvor finder man håndlavede lamper
  • 16:36 Allt du behöver veta om keramiskt
  • 16:14 Vem anlitar man egentligen när tak
  • 16:14 Vem anlitar man egentligen när tak
  • 16:13 Vem anlitar man egentligen när tak
  • 11:52 Noen erfaring med uttak hos Mostbe
  • 11:51 Noen erfaring med uttak hos Mostbe

Sidor

  • Hem
  • Bli bonusmedlem
  • Läs artiklar
  • Chatta med andra
  • Sök och erbjud jobb
  • Kontakta oss
  • Studentlicenser
  • Skriv en artikel

Statistik

Antal besökare:
Antal medlemmar:
Antal inlägg:
Online:
På chatten:
4 570 570
27 958
271 741
5 794
0

Kontakta oss

Frågor runt konsultation, rådgivning, uppdrag, rekrytering, annonsering och övriga ärenden. Ring: 0730-88 22 24 | pelle@pellesoft.se

© 1986-2013 PelleSoft AB. Last Build 4.1.7169.18070 (2019-08-18 10:02:21) 4.0.30319.42000
  • Om
  • Kontakta
  • Regler
  • Cookies