Virksomheder er på vej fra store sprogmodeller, der svarer på spørgsmål, til AI-agenter, der kan udføre opgaver på egen hånd. Det gør teknologien mere nyttig – og langt mere risikabel.
Slettet bruger
29. marts 2010 - 16:36#1
Jeg forstår ikke hvad du mener.
Først siger du:
"Jeg har en funktion til at udregne alder som man kalder med age(DAG, MÅNED, ÅR)."
Er funktionen 'age' en funktion du har i PHP eller har du gemt den i din MySQL database som en stored function? Hvis det er en PHP funktion så virker det selvfølgelig ikke og du kan ikke smide en PHP funktion ind i din sql forspørgelse. Hvis det derimod er en stored function i din database så kan jeg ikke se hvad dit problem er.
Så siger du senere:
"Men dette virker selvfølgelig ikke fordi jeg henter en class i MySQL."
Der tabte du mig helt!
Prøv og kom med et komplet kode eksempel og en forklaring på din age-funktion.
Du kan ikke bruge en php klasse i et mysql kald. De to ting snakker ikke sammen.
Enten skal du hente dit data ud fra mysql, og så her tjekke alder. Ellers skal du sende dataet til mysql i format den forstår og så tjekke det direkte i databasen.
Du har gjort det svært for dig selv ved at have delt datoen op i 3 kolonner. Du skal bruge en DATE kolonne, til at gemme hele fødselsdatoen i.
Hvis du har sådan en, f.eks. birthday, vil du kunne lave sådan et kald (hvis du f.eks. vil have alle der er 20 år gamle) SELECT * FROM tabel WHERE birthday BETWEEN '1988-03-29' && '1989-03-30'
Hvis du gerne vil beholde dine 3 kolonner kan du sikkert lave et kald der kan gøre det med dem også. SELECT * FROM tabel WHERE (b_day>29 && b_month=3 && b_year=1988) || (b_month>3 && b_year=1988) || (b_month<3 && b_year=1989) || (b_day<=29 && b_month=3 && b_year=1989)
Men den 'rigtige' med DATE er betydelig kønnere (og mere effektiv)
Jeg har måske ikke udtrykt mig helt ordentligt, beklager, så prøver lige igen.
Jeg har en funktion ved navn age() så er i PHP og ikke i MySQL. I denne funktion har jeg valgt at gøre det således at data indtastes: age('01-01-1986) Som vil give resultatet "24"
Jeg har efterfølgende en funktion hvor man kan søge på alder. Her skal man jo ikke vælge på fødselsdags dato (19**) men istedet for på alder. Så hvis jeg nu skriver jeg vil finde en person på 20-40 år så skal jeg på en eller anden måde hente data ud (d-m-y) og efterfølgende udregne det til alderen og så se om brugeren skal vises.
Med denne eksempel linje: SELECT * FROM tabel WHERE birthday BETWEEN '1988-03-29' && '1989-03-30'
Så vil det jo blive et helvede hvis man vælger fra 27 år til 58 på en liste og skulle sidde og taste alt ind manuelt?
"Du kan bruge MySQL funktioner it dit MySQL kald. Eller du kan hente brutto data og bruge PHP kode til at udvaelge netto data. "
Kan du forklare nærmere om dette?
Beklager hvis jeg ikke er så formulerende, men arbejder på en deadline og har sovet 3 timer i nat.
" SELECT * FROM tabel WHERE birthday BETWEEN '1988-03-29' && '1989-03-30' Så vil det jo blive et helvede hvis man vælger fra 27 år til 58 på en liste og skulle sidde og taste alt ind manuelt"
A hva?
Du vælger jo bare start dato og slut dato, du skal ikke sidde og taste 31 datoer ind bare fordi du vælger mellem 27 og 58 år.
SELECT * FROM tabel WHERE birthday BETWEEN '1952-03-29' AND '1983-03-29'
Nu har jeg ændret det til én række med DATE f.eks. 1970-01-01 så vi har det på det rene :o)
intenz, jeg forstår det ikke helt, lad os sige jeg har en select box med alder fra 0-99 og lad os sige at brugeren vælger 32 år til 35 år, hvordan ville du så lave det kald? Den kan jeg nemlig ikke helt regne ud.
Måske noget i stil med at lave en while løkke hvor 2010 er 0 år 2009 er 1 år og så lave en between, eller hvordan? :)
Synes godt om
Slettet bruger
30. marts 2010 - 03:02#9
Du bruger PHP's date()-funktion til at finde dags dato. Når det er gjort angiver du "fra alder" eller "start dato" ved at trække X antal år fra dags dato. Eksempel kunne være du gerne vil finde folk på 20 år, så gør det således:
<?php $start_stamp = time() - strtotime("-20 year"); $start_dato = date("Y-m-d", $start_stamp); $end_dato = date("Y-m-d"); $sql = "SELECT * FROM tabel WHERE birthday BETWEEN '" . $start_dato . "' AND '" . $end_dato . "'"; ?>
Koden er ikke testet, men mit trætte hovede kan ikke lige se nogle fejl.
Jeg har en dropdown hvor man vælger fra og til år. Så hvis man nu kun vil have 24 år og vælger 24 på begge to så skriver den i mit kald: ... BETWEEN '1985-03-30' AND '1985-03-30'
Så er det jo kun hvis vedkommende har fødselsdag idag? Hvordan ændre jeg dette, for indtil da virker det perfekt!
At hvis jeg sagtens kan være 25 år uden at have fødselsdag netop idag :)
Jeg ved ikke hvordan det skal bygges, men hvis man nu vælger 25 år så skal den jo ikke gøre som ovenstående, da den specifikt vælger på dagen idag. Hvad hvis jeg har fødselsdag i overmorgen og bliver 26, er jeg så ikke 25 imorgen? :)
Synes godt om
Slettet bruger
30. marts 2010 - 15:01#14
Mac10 brugte du mit eller Wanze's eksempel? I mit skulle din SQL forspørgelse meget gerne se ud ala dette her (eksempel på 0-20 år): SELECT * FROM tabel WHERE birthday BETWEEN '30-03-1990' AND '30-03-2010'
Hvis du vil vælge så du er 25 år, er du jo et sted mellem 25 og 26 år.
Så: $from = date("Y-m-d",strtotime("-26 years")+86400); // Vi lægger lige en enkelt dag til, da man ellers bliver 26 på den valgte dag $to = date("Y-m-d",strtotime("-25 years"));
De to burde give: $form = 1984-03-31 $to = 1985-03-30
Så hvis man er født mellem d. 31/3/1984 og 30/03/1985 er man 25 år I DAG. Hvis man er født før d. 31/3/1984 er man ældre, hvis man er født efter d. 30/03/1985 er man yngre. Hvis du kører funktionen igen i morgen, vil begge datoer så få lagt en til og intervallet vil derfor flytte sig.
Det giver så det samme hvis du vil tjekke folk mellem 30 og 50, så skal du bare ændre den til: $from = date("Y-m-d",strtotime("-51 years")+86400); $to = date("Y-m-d",strtotime("-30 years"));
Altså altid trække et ekstra år fra, og lægge en enkelt dag til.
Så din SQL ser sådan ud: SELECT * FROM tabel WHERE birthday BETWEEN '{$from}' AND '{$to}'
Problemet ligger bare når jeg lige udskriver min query: ... BETWEEN '1988-03-30' AND '1988-03-31' Når jeg vælger 22 år. Men hvad nu hvis man har fødselsdag 1988-05-01 så er man jo også 22, men ikke ifl. ovenstående da den jo kun vælger folk der har fødselsdag mellem d. 30. og 31. i 3. måned?
Så hvis der er en der har fødselsdag 1988-04-01 så er han ikke 22 år? :)
Som #17 skriver, og jeg har også skrev i mit seneste indlæg skal from være 1 højere, da man er MELLLEM 22 og 23 år gammel. Og ikke 22 år og 22 år og en dag gammel.
Perfekt! Tak gutter, der gjorde i lige min dag lidt lettere :)
Smid et svar, det er velfortjent for den hårdte indsats.
Synes godt om
Ny brugerNybegynder
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.