Kom ihåg mig?
Home Menu

Menu


SQL fråga

Ämnesverktyg Visningsalternativ
Oläst 2013-12-15, 00:20 #1
SweLogan SweLogan är inte uppkopplad
Medlem
 
Reg.datum: Sep 2007
Inlägg: 148
SweLogan SweLogan är inte uppkopplad
Medlem
 
Reg.datum: Sep 2007
Inlägg: 148
Standard SQL fråga

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.
SweLogan är inte uppkopplad   Svara med citatSvara med citat
Oläst 2013-12-15, 02:38 #2
Nerix Nerix är inte uppkopplad
Flitig postare
 
Reg.datum: Oct 2010
Inlägg: 398
Nerix Nerix är inte uppkopplad
Flitig postare
 
Reg.datum: Oct 2010
Inlägg: 398
Ett tips är att normalisera databasen. De där ser jätteskumt ut.
Nerix är inte uppkopplad   Svara med citatSvara med citat
Oläst 2013-12-15, 03:08 #3
SweLogan SweLogan är inte uppkopplad
Medlem
 
Reg.datum: Sep 2007
Inlägg: 148
SweLogan SweLogan är inte uppkopplad
Medlem
 
Reg.datum: Sep 2007
Inlägg: 148
Vad menar du med normalisera?
SweLogan är inte uppkopplad   Svara med citatSvara med citat
Oläst 2013-12-15, 03:49 #4
Conny Westh Conny Westh är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Aug 2005
Inlägg: 5 166
Conny Westh Conny Westh är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Aug 2005
Inlägg: 5 166
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...
Conny Westh är inte uppkopplad   Svara med citatSvara med citat
Oläst 2013-12-15, 04:05 #5
Conny Westh Conny Westh är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Aug 2005
Inlägg: 5 166
Conny Westh Conny Westh är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Aug 2005
Inlägg: 5 166
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
Conny Westh är inte uppkopplad   Svara med citatSvara med citat
Oläst 2013-12-15, 23:06 #6
tartareandesire tartareandesire är inte uppkopplad
Supermoderator
 
Reg.datum: Jan 2004
Inlägg: 11 585
tartareandesire tartareandesire är inte uppkopplad
Supermoderator
 
Reg.datum: Jan 2004
Inlägg: 11 585
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
Det är väl bara de som var intressanta om jag förstod dig rätt?
__________________
Full-stack developer, free for smaller assignments
tartareandesire är inte uppkopplad   Svara med citatSvara med citat
Oläst 2013-12-16, 09:24 #7
pelmereds avatar
pelmered pelmered är inte uppkopplad
Har WN som tidsfördriv
 
Reg.datum: May 2010
Inlägg: 1 342
pelmered pelmered är inte uppkopplad
Har WN som tidsfördriv
pelmereds avatar
 
Reg.datum: May 2010
Inlägg: 1 342
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
För att uppfylla alla dina krav till 100% så måste man dock skriva en ganska avancerad query som har subqueries. Det verkar ju dock saknas en del information i ditt exempel, t.ex. datum.
pelmered är inte uppkopplad   Svara med citatSvara med citat
Oläst 2013-12-16, 13:08 #8
SweLogan SweLogan är inte uppkopplad
Medlem
 
Reg.datum: Sep 2007
Inlägg: 148
SweLogan SweLogan är inte uppkopplad
Medlem
 
Reg.datum: Sep 2007
Inlägg: 148
Citat:
Ursprungligen postat av ITisGood.se Visa inlägg
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
För att uppfylla alla dina krav till 100% så måste man dock skriva en ganska avancerad query som har subqueries. Det verkar ju dock saknas en del information i ditt exempel, t.ex. datum.
Jo datum finns Glömde att skriva med det i exemplet.
SweLogan är inte uppkopplad   Svara med citatSvara med citat
Svara


Aktiva användare som för närvarande tittar på det här ämnet: 1 (0 medlemmar och 1 gäster)
 

Regler för att posta
Du får inte posta nya ämnen
Du får inte posta svar
Du får inte posta bifogade filer
Du får inte redigera dina inlägg

BB-kod är
Smilies är
[IMG]-kod är
HTML-kod är av

Forumhopp


Alla tider är GMT +2. Klockan är nu 16:49.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson
 
Copyright © 2017