Gå til innhold

regning med php og finne eldste og nyeste post


Anbefalte innlegg

jeg har tenkt å lage litt statistikk og lurte på hvordan det er med regning og php. vet det skal gå an, men husker ikke helt hva jeg skal søke på.

det jeg har behov for er å plusse, trekke fra hverandre, dele på, og kanskje gange sammen to strenger ($a og $b).

 

jeg lurer også på hvordan jeg kan hente den eldste posten fra en db ut vhja datoen den er postet på. det samme med den nyeste posten.

edit: kan forresten hente ut etter id og, men det blir litt mer tungvint.

 

 

håper noen kan hjelpe.

:)

Endret av Smidt
Lenke til kommentar
Videoannonse
Annonse

Nummer 1:

Regneoperatørene i PHP er de samme som i de fleste (alle?) andre programmeringsspråk:

 

+ = +

- = -

* = gange

/ = dele

 

Du bruker operatørene slik:

$sum = $a * $b

 

Du kan også bruke parenteser:

$sum = ($a + $b) * $c

 

 

Nummer 2:

SELECT * FROM database ORDER BY timestamp ASC LIMIT 1

SELECT * FROM database ORDER BY timestamp DESC LIMIT 1

Lenke til kommentar

Husk på at alle strenger blir til tallet 0 når de blir omregnet til tall. Ergo vil følgende kode bli litt sær:

 


$a = "hei";
$b = 5;

$c = $a + $b;
echo $c; // dette blir 5. Hvis $a endrer verdi til et tall, blir svaret noe annet.

 

Grunnen til at jeg sier det, er fordi du sier at du skal summere to strenger, noe som ikke går an.

 

 

EDIT: Lokaltog: Man har også modulusoperatoren (%), som deler tallene på hverandre, og returnerer restverdien.

 

EDIT2: Mulig eksempelet over gir en error istedenfor å returnere tallet 5.

Endret av jorgis
Lenke til kommentar
går det ann å regne med tid/dato og et helt tall?

f.eks. dele tid på tall?

trekke dato1 fra dato2?

Tror spørringene i posten over skal funke med DATETIME også. Når du sitter med PHP og skal dele dato på tall, er det veldig lurt å konvertere til UNIX-timestamp først.

Lenke til kommentar

hvis du skal ha tiden nå skriver du bare UNIX_TIMESTAMP() i spørringa di. skal du gjøre om en dato til timestamp kan du brukle funksjonen mktime() i php, som tar inn en dato (med eller uten sekun, minutt og time) og gjør om til timestamp. Når du så henter ut timestampen bruker du date() for å gjøre om til leselig dato.

Lenke til kommentar

jeg får ikke det helt til å virke når jeg skal hente ut fra databasen. bruker da denne koden :

<?php
require"dbconnect.php";
$q="SELECT * FROM article ORDER BY timestamp DESC LIMIT 1";
$result= mysql_query($q, $connection) or die() ;
$art=mysql_fetch_object($result)
$date =$art->date;
echo"<p>$date</p>";
?>

har også prøvd å sortere etter datetime siden det er det raden med date er. også date er prøvd uten at jeg får til å echoe noe ut.

hvordan kan det ha seg`?

Lenke til kommentar

har knotet sammen følgende kode for å regne litt, jeg får ut begge datoene (første og siste), men når jeg regner og echoer ut differansen, blir det bare 0, noen som kan se grunnen til det?

<?php
require"./dbconnect.php";
$q="SELECT * FROM article ORDER BY date DESC LIMIT 1";
$result= mysql_query($q, $connection) or die();
$art=mysql_fetch_object($result);
$datelast=$art->date;
echo"$datelast";

echo"<br>";
$q="SELECT * FROM article ORDER BY date ASC LIMIT 1";
$result= mysql_query($q, $connection) or die();
$art=mysql_fetch_object($result);
$datefirst=$art->date;
echo"$datefirst";
echo"<br>";
$datelast=mktime($datelast);
$datefirst=mktime($datefirst);
$dif= $datefirst - $datelast;
$dif=date($dif);

echo"$dif";
?>

Lenke til kommentar
Tror ikke man kan kjøre 2 spørringer etter hverandre

Hvorfor ikke? Funker fint for meg..

 

Anyways, som jorgis nevnte så kan du ikke regne med to strenger. Vet ikke om det funker, men prøv litt type juggling, slik som dette:

 

$dif= (int)$datefirst - (int)$datelast;

 

Eventuelt kan du jo legge inn en var_dump() mellom hver av de instruksjonene og se hva variabelen er underveis, og dermed sjekke hvor feilen oppstår.

 

Edit: det KAN være at mktime() ikke forstår datoformatet, eller det at date() trenger to parametre.

Fra php.net: string date ( string format [, int timestamp]) - ergo må du formatere datoen etter det som står her, og så sende $diff som parameter nummer 2.

Endret av lokaltog
Lenke til kommentar
Tror ikke man kan kjøre 2 spørringer etter hverandre

det skal vel ikke ha noe å si, for jeg får ut begge datoene, det er når jeg trekker den ene fra den andre det går gale.

har tatt gjort to spørringer etterhverandre før, så jeg tror ikke feilen ligger der.

 

 

edit: det virket ikke å legge inn (int) foran hver av strengene,

hvor mente du jeg skulle legge inn var_dump()?

Endret av Smidt
Lenke til kommentar

først hentes datoen ut fra databasen som timedate.

deretter gjøres den om til UNIX_timestamp vhja. mktime().

så regnes det og til slutt gjøres det om til leselig dato vhja. date().

riktig?

hvor kan da feilen ligge?

og hvordan kan jeg underveis sjekke hvor feilen oppstår?

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...