webForumDet fria alternativet

Hämta ut alla värden som matchar.

Databaser & SQL

7 svar · 620 visningar · startad av Sjodahl

Medlem sedan maj 20033 218 inlägg
Frågan#1

Hej,

Det blev en liten kass rubrik kom jag på ;)

Jag har en tabell som ser ut enligt nedan:

id ProblemId StatusId StartDate StopDate
96 29 1 2010-09-01 2010-09-10
97 29 1 2010-09-10 2010-09-24

Och sedan har jag en sök fråga där man skriver in två stycken datum t.ex. 2010-09-10 och 2010-09-20.

Och vill ha fram en SQL fråga som plockar ut alla rader som finns med inom sök intervallet.

Medlem sedan aug. 20039 340 inlägg
#2

Du vill ha ut alla överlappningar, va? Dvs, någon dag i ärendet faller inom sökintervallet?

SELECT * FROM tabell
WHERE StartDate <= '$searchendate' AND StopDate >= '$searchstartdate';

Edit: Nu förutsatte jag PHP som språk, men annars får du infoga sökvariablerna på rätt sätt för språket ifråga.

Medlem sedan sep. 20051 758 inlägg
#3

Om det ska vara datumen i frågan tror jag det då blir (utan att PHP är nödvändigt):

SELECT * FROM tabell
WHERE StartDate >= '2010-09-10' AND StopDate <= '2010-09-20';

Fungerar det inte då med datum inom ' ' så pröva utan.

Redigerades när jag kollade > är större än och < är mindre än. Borde logiskt vara detta som tar fram datum mellan ett startdatum och ett slutdatum.

Redigiringen tog lite tid medan jag tänkte. Fint att det orndade sig i alla fall, men utan PHP är det väl satsen med < och > rätt placerade det ska vara?

Medlem sedan maj 20033 218 inlägg
#4

Ser ut att fungera, konstigt nog så såg min lösning ut så ifrån början men tyckte inte jag fick med allt, men ser ut att haft fel ;)

Stort tack!

Medlem sedan maj 20033 218 inlägg
#5

Hittade nu vad det var som felade lite innan.

Att alltid så är inte "StopDate" satt utan kan vara null tills den blir satt, och sålänge den är null så är den så att säga aktiv och bör räknas med.

Medlem sedan aug. 20039 340 inlägg
#6

b242569 skrev:

Om det ska vara datumen i frågan tror jag det då blir (utan att PHP är nödvändigt):

SELECT * FROM tabell
WHERE StartDate >= '2010-09-10' AND StopDate <= '2010-09-20';

Fungerar det inte då med datum inom ' ' så pröva utan.

Redigerades när jag kollade > är större än och < är mindre än. Borde logiskt vara detta som tar fram datum mellan ett startdatum och ett slutdatum.

Redigiringen tog lite tid medan jag tänkte. Fint att det orndade sig i alla fall, men utan PHP är det väl satsen med < och > rätt placerade det ska vara?

Fast din kod gör inte samma sak som min. Med din kod måste hela det lagrade intervallet vara inneslutet av sökintervallet. Dessutom så går det ju bara att söka efter de fördefinierade datumen om man anger datumen statiskt istället för dynamiskt. Man vill ju kunna fylla i datum i ett formulär och söka.

Medlem sedan aug. 20039 340 inlägg
#7
SELECT * FROM tabell
WHERE StartDate <= '$searchendate' AND (StopDate >= '$searchstartdate' OR StopDate IS NULL);
Medlem sedan maj 20033 218 inlägg
#8

Perfekt!

254 ms totalt · 4 externa anrop · v20260731065814-full.20824b9f
117 ms — deklarationer (db)
0 ms — hämta statistik (cache)
126 ms — hämta tråd, inlägg och bilagor (db)
125 ms — ändringar (db)