Avatar billede elskermad.dk Nybegynder
28. februar 2004 - 20:55 Der er 12 kommentarer og
2 løsninger

avanceret mysql-kald/function

hej eksperter :)
jeg er ved at udvikle en avanceret function som skal bruges til noget kalender-tjek, men det driller bare totalt lige nu, og jeg kan ikke se hoved og hale i det...

det er temmeligt svært at forklare hvordan det virker så jeg har tegnet en lille tegning (paint gør underværker ;D) så i kan se lidt af hvad jeg mener...

http://www.alnet.dk/eks.jpg

det røde felt på tegningen er fravær på en kalender som er gemt i en tabel som ser således ud:

CREATE TABLE `webcal_dag` (
  `id` int(12) NOT NULL auto_increment,
  `brugerid` int(12) NOT NULL default '0',
  `fra` int(12) NOT NULL default '0',
  `type` varchar(55) NOT NULL default 'ferie',
  `tekst` longtext NOT NULL,
  `til` int(12) NOT NULL default '0',
  PRIMARY KEY  (`id`),
  UNIQUE KEY `id` (`id`)
) TYPE=MyISAM AUTO_INCREMENT=64 ;

det blå felt er en ønsket oprettelse af en aktivitet på en kalender...

nu vil jeg gerne at man kan tjekke for om der er det blå felt findes en oprettet fravær således at det ikke kan lade sig gøre at oprette det givende tidspunkt!

oplysningerne om fra/til i tabellen er gemt i unix timestamp og det blå felt er også med start/slut i unix timestamp...

det blå felt har variablerne $fra og $til som skal bruges...

det hele skal så laves i en mysql-kald som kan tjekkes for om der bliver fundet nogle rækker som konflikter

ved ikke om der er nogen der kan forstå hvad jeg mener men håber det inderligt da jeg virkelig er fået død :(
ellers kan jeg prøve igen selvom jeg ikke ved om jeg kan forklare det bedre!

- på forhånd tak for hjælpen...
Avatar billede elskermad.dk Nybegynder
28. februar 2004 - 20:58 #1
en tegning over hvilke hvad der skal godkendes og hvad der ikke godkendes...

http://www.alnet.dk/eks2.jpg (rød kryds fejl, grøn V iorden)
Avatar billede Slettet bruger
28. februar 2004 - 23:23 #2
Du kan lave en søgning med

SELECT id FROM webcal_dag
WHERE
    ('$fra' BETWEEN fra AND til)
  OR ('$til' BETWEEN fra AND til)
  OR ('$fra' < fra AND '$til' > til)

Hvis denne søgning giver resultat, findes der allerede noget, der overlapper.
Avatar billede elskermad.dk Nybegynder
28. februar 2004 - 23:34 #3
ehmn ser ikke ud til at virke :/ noget jeg kan gøre forkert?
Avatar billede Slettet bruger
28. februar 2004 - 23:36 #4
Prøv at vise koden, du forsøger med. Ellers skal jeg jo gætte i blinde.
Avatar billede elskermad.dk Nybegynder
28. februar 2004 - 23:40 #5
okay det bliver en del kode så:

function bookingmulig($fra,$til,$dato,$maned,$ar,$brugerid,$id = '') {
    $sql = "" .
        "SELECT * " .
        "FROM webcal_note " .
        "WHERE ".
        "( " .
        "    ( brugerid='$brugerid' ) AND " .
        "    ( dato='$dato' ) AND " .
        "    ( maned='$maned' ) AND " .
        "    ( ar='$ar' ) AND " .
        "    ( id!='$id' ) AND " .
        "    ( " .
        "        (( tidspunkt_fra < '$fra' ) AND ( tidspunkt_til > '$fra' )) OR " .
        "        (( tidspunkt_fra < '$til' ) AND ( tidspunkt_til > '$til' )) OR " .
        "        (( tidspunkt_fra < '$fra' ) AND ( tidspunkt_til > '$til' )) OR " .
        "        (( tidspunkt_fra > '$fra' ) AND ( tidspunkt_til < '$til' )) OR " .
        "        (( tidspunkt_fra = '$fra' ) AND ( tidspunkt_til = '$til' )) " .
        "    )" .
        ")";

    $result = mysql_query($sql) or die(mysql_error());

    // test om der er nogle aftaler, som konflikter med den ønskede aftale....
    if(mysql_num_rows($result) > 0) {
        return false;
    }
    else {
       
        // tjek for ferie
        $foresp = mysql_query("SELECT id FROM webcal_dag WHERE ('$fra' BETWEEN fra AND til) OR ('$til' BETWEEN fra AND til) OR ('$fra' > fra AND '$til' < til)") or die(mysql_error());

        // test om der er nogle ferier, som konflikter med den ønskede aftale....
        if(mysql_num_rows($foresp) > 0) {
            return false;
        }
        else {
            return true;
        }
       
    }
}

har vendt < og > i din kode da jeg skulle se om det ikke virkede mere logisk...
dette er functionen som tjekker om der allerede findes en aktivitet det pågælnende tidspunkt, og nu skal jeg også have den til at tjekke for om der findes en fravær-post i tabellen webcal_dag...


dette er hvad der skal oprette den nye aktivitet og tjekke for om den findes inden... (tiltime-func laver det ønskede fra/til-tidspunkt om til unix-timestamp)

$fra = tiltime($_POST[opret_fra_dato],$_POST[opret_fra_maned],$_POST[opret_fra_ar],$_POST[opret_fra_time],$_POST[opret_fra_min]);
$til = tiltime($_POST[opret_fra_dato],$_POST[opret_fra_maned],$_POST[opret_fra_ar],$_POST[opret_til_time],$_POST[opret_til_min]);
   
if (bookingmulig($fra,$til,$_POST[opret_fra_dato],$_POST[opret_fra_maned],$_POST[opret_fra_ar],$_POST[opret_bruger])==true) { // indsætter i tabelen
Avatar billede Slettet bruger
29. februar 2004 - 00:17 #6
Du skulle ikke vende < og > fra min kode. Her er forklaringen på koden:

('$fra' BETWEEN fra AND til)
  Den ny aftale starter i det forbudte tidsrum

OR ('$til' BETWEEN fra AND til)
  Den ny aftale slutter i det forbudte tidsrum

De to første regler fanger de tre første af dine rød-kryds-eksempler.

OR ('$fra' < fra AND '$til' > til)
  Den ny aftale starter før og slutter efter det forbudte tidsrum. Dette er dit sidste røde kryds. Hvis du vender >< om, vil den kun fange dem ved det første kryds, og dem har vi jo allerede fanget med de andre regler.
Avatar billede elskermad.dk Nybegynder
29. februar 2004 - 00:28 #7
havde også prøvet med det du havde skrevet, men virkede heller ikke derfor jeg prøvede det andet!
Avatar billede Slettet bruger
29. februar 2004 - 00:58 #8
Det kan være, at du skal bruge:

SELECT id FROM webcal_dag
WHERE
(  ('$fra' BETWEEN fra AND til)
  OR ('$til' BETWEEN fra AND til)
  OR ('$fra' < fra AND '$til' > til)
)
  AND type='ferie'

Hvis det kun er ferie, som den skal søge på.

Og ellers må du forklare nærmere hvad der går galt. Kommer den med fejl? Godkender den for lidt? Eller for mange?
Avatar billede elskermad.dk Nybegynder
29. februar 2004 - 09:37 #9
det er ikke kun ferie det er alle typer, men den finder ikke nogle rækker selvom de eksistere...
Avatar billede Slettet bruger
29. februar 2004 - 12:33 #10
Prøv at fortælle indholdet af de rækker, den ignorerer, samt indholdet af den, du undersøger for. Det er lettere at fejlfinde med eksempeldata.
Avatar billede elskermad.dk Nybegynder
26. marts 2004 - 19:11 #11
lægger du et svar?
Avatar billede Slettet bruger
29. marts 2004 - 01:39 #12
Fandt du ud af det?
Avatar billede elskermad.dk Nybegynder
06. maj 2004 - 17:36 #13
lægger du et svar sandbox?
Avatar billede Slettet bruger
06. maj 2004 - 17:53 #14
OK
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
Vi tilbyder markedets bedste kurser inden for webudvikling

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