FAQ |
Kalender |
![]() |
#1 | ||
|
|||
Medlem
|
Ska göra en undersökning i en webshop och det jag vill kolla om någon har gjort en beställning där beställningen inte har slutförts.
ID - Betald - Personnummer - Summa 1 - 1 - xxxxxx-xxxx - 100 2 - 0 - yyxxxx-xxxx - 200 3 - 0 - yyxxxx-xxxx - 200 4 - 1 - yyxxxx-xxxx - 200 5 - 0 - ggxxxx-xxxx - 300 - Dessa är av intresse, men ska bara räkna en av dem 6 - 0 - ggxxxx-xxxx - 300 - Dessa är av intresse, men ska bara räkna en av dem Då ska sqlen retunera totalsumman på 300 alltså de två sista raderna då nån har gjort en beställning men inte betalningen har gått igenom. Men har han försökt med t.ex ett annat betalsätt så ska den inte räknas med om den vart satt som betald. Sen ska toleransen vara på 2 dagar, ifall personen har gjort flera köp under året. |
||
![]() |
![]() |
![]() |
#2 | ||
|
|||
Flitig postare
|
Ett tips är att normalisera databasen. De där ser jätteskumt ut.
|
||
![]() |
![]() |
![]() |
#3 | ||
|
|||
Medlem
|
Vad menar du med normalisera?
|
||
![]() |
![]() |
![]() |
#4 | ||
|
|||
Klarade millennium-buggen
|
Det finns en bra grund som förklarar normalisering här: http://www.databasteknik.se/webbkursen/normalisering/
Läs detta först innan du ställer frågor om relationsdatabaser och SQL. Såg att i länken finns ett fel hur man tolkat 3NF. 3NF krävs att man har en unik identifiering av varje enskild rad i tabellen så felet som beskrivs kan aldrig uppkomma. BCNF bygger på detta missförstånd av Codds ursprungliga definition av 3NF. Det finns även en 4NF men i normalfallet räcker det gott att använda 3NF. Ska kolla om jag hittar en bättre länk... |
||
![]() |
![]() |
![]() |
#5 | ||
|
|||
Klarade millennium-buggen
|
Här visar jag ett försök att ha normaliserat din databas till 3NF för att visa vilka konsekvenser det får och hur det kan se ut i just ditt fall.
Databasen behöver normaliseras så man lägger upp separata tabeller för: Tabell: Kund - Kundnr (PK) - Personnr (ev. FK) - Namn Tabell: KundOrder - Ordernr (PK) - Datum - Kundnr (FK->Kund.Kundnr) Tabell: KundOrderRad - Ordernr (PK->KundOrder.Ordernr) - RadNr (PK) - ArtikelID (FK->Artikel.ArtikelID) - FaktisktPris - Antal - RadRabattBelopp Tabell: Artikel - ArtikelID (PK) - Benämning - Pris - Moms Tabell: Betalning - BetalningsID (PK) - Datum - OrderNr (FK->KundOrder.Ordernr) - Belopp - Betalsätt (FK->Betalsätt.BetalsättID) Tabell: Betalsätt - BetalsättID (PK) - BetalsättNamn Du behöver normalt bryta ut betalning från kundorder-tabellen eftersom kunder ofta betalar fel belopp och då kommer det att finnas flera olika betalningar med olika datum som du behöver hålla koll på. PK => Primärnyckel (Primary Key på engelska, kan vara en eller flera kolumner i databasen) FK => Främmande nyckel (Forreign Key på engelska) Pekar på en primärnyckel i en annan tabell. En FK kan även vara en PK samtidigt, då kallas det för att relationen ät Identifying.... Senast redigerad av Conny Westh den 2013-12-15 klockan 04:12 |
||
![]() |
![]() |
![]() |
#6 | ||
|
|||
Supermoderator
|
Connys förslag är väl antagligen irrelevant för din del då jag förmodar att du inte har möjlighet att bygga om databasen? Jag föreslår att du bara plockar ut alla obetalda rader ur databasen och sen hanterar dessa i valfritt scriptspråk.
Kod:
SELECT * FROM tbl WHERE Betald = 0 AND Summa = 300
__________________
Full-stack developer, free for smaller assignments |
||
![]() |
![]() |
![]() |
#7 | |||
|
||||
Har WN som tidsfördriv
|
För att plocka ut alla obetalda och filtrera bort alla dubbletter kan du köra följande query:
Kod:
SELECT DISTINCT * FROM tbl WHERE Betald = 0 |
|||
![]() |
![]() |
![]() |
#8 | ||
|
|||
Medlem
|
Citat:
![]() |
||
![]() |
![]() |
Svara |
Ämnesverktyg | |
Visningsalternativ | |
|
|