Just nu i M3-nätverket
Gå till innehåll
geezer

Skapa ett eget forum, inte ladda hem ett befintligt!

Rekommendera Poster

Jag tänkte alltså att du använder RootProjectID i din spGetProjects, så att den returnerar alla underprojekt till rootprojektet. ParentID används som den gör nu i koden.

 

spGetProjects RootProjectId, som då gör en SELECT * FROM Projects WHERE RootProjectId=@RootProjectId

 

spGetPersons vill jag ska returnera alla personer som är kopplade till något av projekten under huvudprojektet.

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Kom på en sak.

Det går att välja ett underprojekt i min listbox med projekt så då bör man inte använda sig utan rootprojektid, utan av parentprojectid, men det bör väl gå lika bra?

Alltså SELECT * FROM tblProject WHERE ParentProjectID = @ProjectID (det valda projektets id)

 

spGetPerson.. hur gör man en sån sql-sats som returnerar personer som är kopplade till antingen det valda projektet eller till något av alla underliggande? För att även om en person (eller om man valt en person från listboxen) finns med i huvudprojektet är det kanske inte säkert att han finns med i projekt10 2 nivåer ner och ska således inte visas under projekt10 men under huvudprojektet.

Rörigt :)

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Alltså, de frågor som läser in data i mina strukturer kan se likadana ut oavsett om du valt ett huvudprojekt eller något av dess underprojekt (det gör inget om strukturerna innehåller lite mer data än som behövs)

 

Det är i själva DoTree som du sen väljer vad trädet ska använda som rot, huvudprojektID eller underprojektsID (där kan du passera in vilket projektId som helst, detta projekt blir då rot i det trädet)

 

Din query: SELECT * FROM tblProject WHERE ParentProjectID = ProjectID funkar dock inte, den returnerar ju bara de underprojekt som ligger direkt under ProjektID. Den fråga som ligger i spGetProjects måste även returnera alla underprojekts underprojekt ner till botten. Det var därför jag föreslog att du i frågan plockar ut på RootProjectId som filter.

 

spGetPerson

--------------

SELECT * FROM Person WHERE ProjectId IN (SELECT ProjectId FROM tblProject WHERE RootProjectIt=@RootProjectId)

 

spGetProjects

--------------

SELECT ProjectId FROM tblProject WHERE RootProjectIt=@RootProjectId

 

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Ok, jag börjar förstå..

Men då måste jag ta reda på först vad RootProjectID är då för det vet man ju inte från början?

 

Din query: SELECT * FROM tblProject WHERE ParentProjectID = ProjectID funkar dock inte
Om man tar WHERE ParentProjectID = @ProjectID OR ProjectID = @ProjectID då?

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Dom viktiga är väl:

ProjectID, ParentProjectID, RootProjectID.

Ett huvudprojekt har alltså tex 10 som ProjectID, Null som ParentProjectID och 10 som RootProjectID.

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser
Om man tar WHERE ParentProjectID = ProjectID OR ProjectID = ProjectID då?

 

Då får du inte med alla poster nedåt.

 

Definiera din sp så här istället, så kan du anropa dem med aktuellt projektID istället för med ett rotID:

 

CREATE PROCEDURE spGetPersons
@ProjectId [color="#0000ff"]In[/color]t
AS
DECLARE @RootId [color="#0000ff"]In[/color]t
[color="#0000ff"]Select[/color] @RootId=RootProjectId FROM tblProjects WHERE ProjectId=@ProjectId

[color="#0000ff"]Select[/color] * FROM tblPersons WHERE ProjectId [color="#0000ff"]In[/color] ([color="#0000ff"]Select[/color] ProjectId FROM tblProjects WHERE RootProjectId=@RootId)

CREATE PROCEDURE spGetProjects 
@ProjectId [color="#0000ff"]In[/color]t
 AS
DECLARE @RootId [color="#0000ff"]In[/color]t
[color="#0000ff"]Select[/color] @RootId=RootProjectId FROM tblProjects WHERE ProjectId=@ProjectId
[color="#0000ff"]Select[/color] * FROM tblProjects WHERE RootProjectId=@RootId

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Ok, får testa det sen.. håller på och gör om en del saker så jag kommer nog inte att kunna testa det idag.

 

In (Select blablabla) - Är det vad dom kallar för sub-query eller?

Har inte använt det, brukar köra med joins istället.. måste köra det nu också eftersom jag använder mig av tabellen tblProject_Person som är kopplingstabell mellan projekt och person.

 

Men dina sp kommer säkert att funka. Jättetack. Ska testa detta imorgon och pula lite och om det inte fungerar så hör jag av mig ;)

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser
Är det vad dom kallar för sub-query eller?

 

Precis! På samma sätt som du kan skriva SELECT * FROM Tabell WHERE id IN (1,2,3,4,5,6) kan du använda en query i parentesen istället. Subqueries är inte optimala att använda, men i det här fallet så handlar det om en relativt liten mängd data så då är det ok.

 

Jättetack. Ska testa detta imorgon och pula lite och om det inte fungerar så hör jag av mig ;)

 

Sure thing. Lycka till!

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Skapa ett konto eller logga in för att kommentera

Du måste vara medlem för att kunna kommentera

Skapa ett konto

Skapa ett nytt konto på vårt forum. Det är lätt!

Registrera ett nytt konto

Logga in

Redan medlem? Logga in här.

Logga in nu



×
×
  • Skapa nytt...