webForumDet fria alternativet

Anmälningsscript => Dubbelbokning av plats

7 svar · 640 visningar · startad av MickeA.com

MickeA.comMedlem sedan feb. 20034 441 inlägg
#1

Tjena
Har två tabeller, en med grupper och en med anmälningar.
Nu är det så att jag ska göra så att samma person inte ska kunna anmäla sig till två olika grupper under samma termin (inte heller två ggr till samma).

Har suttit och provat olika saker, men får inte till det alls.

Mina tabeller:

[i]tbl_sSchool_groups[/i]
gId (Idnummer, räknare)
gName (Gruppnamn, Text)
gStartDate (Startdatum, datum/tid)
gEndDate (Slutdatum, datum/tid)
gClosed (Gruppen stängd?, Ja / Nej)

[i]tbl_sSchool_notifications[/i]
nId (Idnummer, räknare)
nPersNum (Personnummer, Text)

Nu ska jag alltså sy ihop det här på något sätt.
Det kan hända att en person har anmält sig föregående termin, dessa ska givetvis kunna anmäla sig till nästa, men jag tänkte att man måste utgå från persnummer, startdatum / slutdatum samt gruppid.

Några som har förslag?
Förklarar jag dåligt, säg gärna till så kan jag utveckla.

Tack på förhand!

Engine^Medlem sedan dec. 20003 887 inlägg
#2

Det känns som om du saknar information i tabelldesignen (det kan vara bra med en koppling mellan notifications och groups). Min första tanke är något i den här stilen

select nId
from tbl_sSchool_notifications tsn
inner join tbl_sSchool_groups tsg on tsn.? = tsg.?
group by nId
having count(*) > 1
MickeA.comMedlem sedan feb. 20034 441 inlägg
#3

Tjena
Men kopplingen bör ske på nått sätt via startdatum / slutdatum.
Det funkar nämligen så att det är ca. 100 grupper som startar tex. 2005-10.
Nästa omgång börjar 2006-01 och då ska folk kunna anmäla sig igen (om dessa vill fortsätta simma), men de ska inte kunna anmäla sig mer än en (1) gång / termin.
Från början kollade jag om personnumret redan fanns i databasen och satte stopp den vägen.
Men det gjorde att folk som ville fortsätta från föregående år inte kunde anmäla sig.
Efter det så kollade jag om personen redan anmält sig till samma grupp som denna "håller på" att anmäla sig till, även det lätt fixat, men hjälper inte mig, eftersom det innebär att personen kan anmäla sig till vilken annan grupp som helst, men itne till SAMMA grupp fler än en gång.

Jag skulle behöva en fråga som kollar:
"Hämta personnummer från tabell där personnummer = (p-nummer på den som anmäler sig) och startdatum för grupp INTE ÄR (samma som aktuellt startdatum)"
Mkt, mkt rörigt i huvudet just nu, men skulle verkligen behöva lösa det här.

Fler tips välkomnas!

@ndersMedlem sedan juni 200032 969 inlägg
#4

Jag måste nog ställa samma fråga som Engine^. Hur ser kopplingen ut mellan tbl_sSchool_groups och tbl_sSchool_notifications?
Typ ID från schoolgroups i notifications?

MickeA.comMedlem sedan feb. 20034 441 inlägg
#5

Bokningssystemet består av totalt 3 tabeller:

[i]tbl_sSchool_levels[/i] (Nivåer)
lId (Idnummer, räknare)
lName (Nivånamn, Text)

[i]tbl_sSchool_groups[/i] (Grupper)
gId (Idnummer, räknare)
lId (Nivå-Id, Tal)
gName (Nivånamn, Text)
gStartDate (Startdatum för grupp, Datum / Tid)
gEndDate (Slutdatum för grupp, Datum / Tid)
gClosed (Gruppen öppen / stängd, Ja / Nej)

[i]tbl_sSchool_notifications[/i] (Anmälningar)
nId (Idnummer, räknare)
gId (Grupp-Id, Tal)
nPersNum (Personnummer, Text)

På grupptabellen kan man m.h.a gClosed öppna / stänga en grupp för vidare anmälning.
Man skulle kunna använda sig av det, man skulle då kunna ha en fråga som kollar om personnummer redan existerar, hämta, grupp-id och kolla i grupptabellen om gruppen är öppen eller stängd, är det stängd får man anmäla sig till en grupp till, annars inte.

Ska jag förklara mer?

Tack!

@ndersMedlem sedan juni 200032 969 inlägg
#6

Ska jag förklara mer?

Nej, nu finns det åtminstone tillräcklig information för att kunna ge ett svar.

Jag skulle behöva en fråga som kollar:
"Hämta personnummer från tabell där personnummer = (p-nummer på den som anmäler sig) och startdatum för grupp INTE ÄR (samma som aktuellt startdatum)"

Något sånt här?

select npersnum
from tbl_sSchool_notifications
where npersnum not in 
	(select npersnum from tbl_sSchool_notifications sn 
	inner join tbl_sSchool_groups sg on sn.gID = sg.gID 
	and sg.gStartDate = '2005-04-11')
MickeA.comMedlem sedan feb. 20034 441 inlägg
#7

Har idag pratat med klubben i fråga och har kommit på en annan möjlig lösning, som kanske kan vara bättre.
Den här kryssrutan i tabellen tbl_sSchool_groups som heter isClosed använder som när dom ska stänga grupper för vidare anmälning.
Då kan man alltså göra så att man vid anmälan kollar om personnumret redan finns i databasen, om så är fallet kollas det om grupper i fråga är öppen eller stängd, är den öppen ska man inte kunna anmäla sig till fler grupper, är den stängd (alltså antingen gammal eller pågående) ska man kunna anmäla sig en gång till. Löser man det så istället slipper man blana in datum och sånt, vilket underlättar en del.

Frågan är bara: Hur ska en sådan fråga se ut?

Upptäckte precis att jag glömt bort det viktigaste att tala om min DBMS, som är Access.

Mkt tacksam för vidare hjälp!

MickeA.comMedlem sedan feb. 20034 441 inlägg
#8

Gjorde om frågan ovan lite, så den ser ut såhär:

sSql		=	"SELECT nPersNum " &_
			"FROM tbl_sSchool_notifications " &_
			"WHERE nPersNum NOT IN " &_
			"(SELECT nPersNum FROM tbl_sSchool_notifications sn INNER JOIN tbl_sSchool_groups sg ON sn.gId = sg.gId AND sg.gClosed = FALSE)"

Men får Syntaxfel, vad kan felet vara?

Tackar för all hjälp jag kan få.

138 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
135 ms — hämta tråd, inlägg och bilagor (db)