Avatar billede alpapa Nybegynder
21. februar 2003 - 16:49 Der er 15 kommentarer og
1 løsning

SQL betingelser

Hej Eksperter

Dobbeltbooking må ikke kunne laves!

Har en databasetabel med 4 kolonner.
id = primær, start, slut, projektleder.

Hvis jeg har en post i databasen hvor start datoen er: 030103 (måned, dag og år) og slutdatoen er: 040103 - her i mellem må man ikke kunne booke den projektleder, da denne jo er optaget i et andet projekt.

Altså, start må ikke være > den eksisterende 030103 og < 040103 - hvis I forstår.

Hvordan kan jeg skrive denne SQL sætning færdig?

mysql_query("INSERT INTO tjek (start, slut, projektleder) VALUES ('$start', '$slut', '$projektleder') WHERE ???")

Håber der er nogle der kan hjælpe.

På forhånd tak :-)
alpapa
Avatar billede twm Nybegynder
21. februar 2003 - 16:51 #1
Du er nødt til at lave en select der spørger om det før du skyder din insert af
Avatar billede alpapa Nybegynder
21. februar 2003 - 16:55 #2
Okay - hvordan?
Avatar billede twm Nybegynder
21. februar 2003 - 16:58 #3
Noget lign:
SELECT projektleder FROM tjek WHERE projektleder='$projektleder' and ((start<=$start and slut>=$start) or (start<=$slut and slut>=$slut))
Avatar billede twm Nybegynder
21. februar 2003 - 16:59 #4
Hvis du får et recordset ud er projektlederen booket
Avatar billede alpapa Nybegynder
21. februar 2003 - 17:06 #5
Hmmm, jeg kan ikke helt forstå det. Hvis jeg laver en forespørgsel før jeg laver en eventuel dobbelt booking, findes der jo ingen dobbeltbooking?
Avatar billede lgy Nybegynder
21. februar 2003 - 20:02 #6
Laver du det på MS SQL eller MySql??
Avatar billede alpapa Nybegynder
21. februar 2003 - 20:07 #7
MySQL
Avatar billede lgy Nybegynder
21. februar 2003 - 20:18 #8
OK Hvis du havde brugt MS SQL kunne du have brugt triggers, men MySQL kender jeg ikke.
Avatar billede alpapa Nybegynder
21. februar 2003 - 20:26 #9
Damn :-(
Avatar billede lgy Nybegynder
21. februar 2003 - 20:39 #10
twm's løsning burde også kunne lade sig gøre, da den jo tester på om der i forvejen finde en record, som har en projektperiode, der overlapper den periode du prøver at indsætte.
Avatar billede alpapa Nybegynder
21. februar 2003 - 20:44 #11
Okay - har prøvet med den løsning, kan ikke få det til at fungere, men hvis twm kan skrive hele MySQL sætningen - både med SELECT og INSERT, ville jeg blive meget glad.
Avatar billede twm Nybegynder
23. februar 2003 - 17:30 #12
Først så tager du SELECT forespøgslen
Derefter kontrollerer du om recordsettet er tomt. Hvis det er tomt er der ingen bookning på det aktuelle tidspunkt, og du kan udføre din INSERT (Ex):
$con = mysql_connect("10.0.0.1", "username","password") or die("Could not connect: " . mysql_error());
mysql_select_db("DinDB", $con) or die(mysql_errno() . ": " . mysql_error() . "<br>");
$sql = "SELECT projektleder FROM tjek WHERE projektleder='$projektleder' and ((start<=$start and slut>=$start) or (start<=$slut and slut>=$slut))";
$result = mysql_query($sql, $con);
$rowCount = mysql_num_rows($result);
if($rowcount==0)
    mysql_query("INSERT INTO tjek (start, slut, projektleder) VALUES ('$start', '$slut', '$projektleder')")
else
    // Gør et eller andet hvis der er en bookning i forvejen

Jeg har ikke testet koden! ;)
Avatar billede alpapa Nybegynder
23. februar 2003 - 20:49 #13
Tusinde tak - nu skal jeg nok få det til at virke :-)
Alpapa
Avatar billede alpapa Nybegynder
23. februar 2003 - 21:55 #14
Det virker - genialt - hvor er jeg glad ;->
Avatar billede twm Nybegynder
25. februar 2003 - 11:07 #15
Tak for point! ;)
Avatar billede alpapa Nybegynder
25. februar 2003 - 23:34 #16
Jamen, dem har du såsannelig fortjent :->>
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester