Gå til innhold

regning med php og finne eldste og nyeste post


Anbefalte innlegg

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

Du kan ikke kjøre to spørringer i et kall til mysql_query(). F.eks. er dette galt:

 

$sql = mysql_query("SELECT * FROM users; INSERT fisk INTO users;");

 

Å kjøre to seperate spørringer går helt greit.

Lenke til kommentar
Videoannonse
Annonse

mysql har førti-snørr funksjoner for å gjøre dato-matematikk i en håndvending. men jeg skjønner fortsatt ikke hva du ønsker å gjøre?

 

du trenger ikke + og - for å finne eldste dato. ønsker du å finne alder på den eldste datoen?

 

select max(dato) from tabell

 

hentes lett ut vha php.

 

evt kan mysqlfunksjonen datediff brukes for å hente ut alder i dager.

 

alder til nyeste dato:

select datediff(now(),dato) as alder from tabell order by dato desc limit 1

 

alder til eldste dato:

select datediff(now(),dato) as alder from tabell order by dato limit 1

 

EDIT: alle funksjonene finner du her:http://dev.mysql.com/doc/mysql/en/Date_and_time_functions.html

Endret av Torbjørn
Lenke til kommentar

det jeg tenker å gjøre er å først finne dato(m/tid) for elste og nyeste post. deretter dele differansen på antall poster som er postet totalt for å finne hvor ofte det har blitt postet. foreløpig er det bare det jeg ønsker å få til.

 

er åpen for andre statistikk forslag, men først hadde det vært greit å få løst det første.

Lenke til kommentar

jeg har nå funnet feilen, men vet ikke hvordan jeg skal fikse 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>";
$datelastmk=mktime($datelast);
$datefirstmk=mktime($datefirst);
echo"$datefirstmk<br>";
echo"$datelastmk";

?>

når jeg echoer ut $datefirstmk og $datelastmk blir de det samme talle og tallet forandrer seg når jeg refresher. det må jo da være grunnen til at jeg får 0 som sum når jeg trekker de fra hverandre.

det virker jo da som om stringene blir omgjort til det tidspunktet som er nå og til unix timestamp på en gang, mens jeg bare vil at de skal bli til unix timestamp (om jeg har forstått rett).

hvordan kan jeg fikse på det?

Lenke til kommentar

okei, tester med Torbjørn sin kode:

<?php
require"dbconnect.php";
$q="SELECT max(date) FROM article";
$result= mysql_query($q, $connection) or die();
$art=mysql_fetch_object($result);
$datelast=$art->date;
echo"$datelast";

require"dbconnect.php";
$q="SELECT min(date) FROM article";
$result= mysql_query($q, $connection) or die();
$art=mysql_fetch_object($result);
$datelast=$art->date;
echo"$datefirst";


?>

Dette skulle da i prinsippet echoet ut den siste og første datoen en post ble skrevet, men jeg får ikke ut noe.

der etter vil jeg regne ut differansen mellom disse to tidene og dele differansen på antall poster.

Lenke til kommentar

prøv med

$q="SELECT max(date) AS lastDate FROM article";

$result= mysql_query($q, $connection) or die();

$art=mysql_fetch_object($result);

$datelast=$art->lastDate;

og

 

$q="SELECT min(date) AS firstDate FROM article";

$result= mysql_query($q, $connection) or die();

$art=mysql_fetch_object($result);

$datefirst=$art->firstDate;

Lenke til kommentar

jess, da er vi der og kan hente ut dato og tid med følgende kode.

<?php
require"dbconnect.php";
$q="SELECT minx(date) AS lastDate FROM article";
$result= mysql_query($q, $connection) or die();
$art=mysql_fetch_object($result);
$datelast=$art->lastDate;
echo"$datelast<br>";

$q="SELECT max(date) AS firstDate FROM article";
$result= mysql_query($q, $connection) or die();
$art=mysql_fetch_object($result);
$datefirst=$art->firstDate;
echo"$datefirst";
?>

hvordan kan jeg så trekke den første fra den siste nå?

Endret av Smidt
Lenke til kommentar
jess, da er vi der og kan hente ut dato og tid med følgende kode.

<?php
require"dbconnect.php";
$q="SELECT max(date) AS lastDate FROM article";
$result= mysql_query($q, $connection) or die();
$art=mysql_fetch_object($result);
$datelast=$art->lastDate;
echo"$datelast<br>";

$q="SELECT min(date) AS firstDate FROM article";
$result= mysql_query($q, $connection) or die();
$art=mysql_fetch_object($result);
$datefirst=$art->firstDate;
echo"$datefirst";
?>

hvordan kan jeg så trekke den første fra den siste nå?

/* return the difference in days between two PHP timestamps */

$var_days = ($lastDate - $firstDate) / 86400; // sekunder per day

 

 

Ellers er det noen php datediff functioner her:

http://www.ilovejackdaniels.com/php/php-datediff-function/

 

http://www.michaelhorowitz.com/php/datediff.php

Endret av joffar
Lenke til kommentar

når jeg trekker den ene fra den andre blir det bare 0 uansett.. det går altså gale ett eller annet sted under regningen. har nå altså samme feilen som i sted.

<?php
require"dbconnect.php";
$q="SELECT max(date) AS lastDate FROM article";
$result= mysql_query($q, $connection) or die();
$art=mysql_fetch_object($result);
$datelast=$art->lastDate;
echo"Siste post er foreløpig postet $datelast<br>";

$q="SELECT min(date) AS firstDate FROM article";
$result= mysql_query($q, $connection) or die();
$art=mysql_fetch_object($result);
$datefirst=$art->firstDate;
echo"Første post ble skrevet $datefirst<br>";

$datefirst=mktime($datefirst);
$datelast=mktime($datelast);

$var_days = ($lastdate - $firstdate);
echo"$var_days";

?>

Lenke til kommentar
når jeg trekker den ene fra den andre blir det bare 0 uansett.. det går altså gale ett eller annet sted under regningen. har nå altså samme feilen som i sted.

<?php
require"dbconnect.php";
$q="SELECT max(date) AS lastDate FROM article";
$result= mysql_query($q, $connection) or die();
$art=mysql_fetch_object($result);
$datelast=$art->lastDate;
echo"Siste post er foreløpig postet $datelast<br>";

$q="SELECT min(date) AS firstDate FROM article";
$result= mysql_query($q, $connection) or die();
$art=mysql_fetch_object($result);
$datefirst=$art->firstDate;
echo"Første post ble skrevet $datefirst<br>";

$datefirst=mktime($datefirst);
$datelast=mktime($datelast);

$var_days = ($lastdate - $firstdate);
echo"$var_days";

?>

Her er feilen

 

$datefirst=mktime($datefirst);

$datelast=mktime($datelast);

 

feil:

$var_days = ($lastdate - $firstdate);

 

 

skal være:

$var_days = ($datelast - $datefirst);

 

echo"$var_days";

Endret av joffar
Lenke til kommentar

Vis du vil hente ut første og siste post, kan du enkelt gjøre det med max() og min() -->

(som er mysql funksjoner).

 

$query= "SELECT min(timestamp eller id), max(timestamp eller id) FROM tabellnavn";

Endret av rogbiff
Lenke til kommentar

igjen, leste du mysql siden jeg foreslo?

 

skal du hente ut forskjellen i dager kanskje? bruk da to_days

 

select to_days(now()) - to_days(min(dato)) as EldsteDagerGammel

 

select to_days(now()) - to_days(max(dato)) as YngsteDagerGammel

Endret av Torbjørn
Lenke til kommentar

har knotet litt frem og tilbake og fått til dette:

nå virker det som det skal og

<?php
require"dbconnect.php";
$q="SELECT max(date) AS lastDate FROM article";
$result= mysql_query($q, $connection) or die();
$art=mysql_fetch_object($result);
$datelast=$art->lastDate;


$q="SELECT min(date) AS firstDate FROM article";
$result= mysql_query($q, $connection) or die();
$art=mysql_fetch_object($result);
$datefirst=$art->firstDate;
echo"Første post ble skrevet $datefirst<br><br>";
echo"Siste post er foreløpig postet $datelast<br>";
$datefirst=strtotime($datefirst);
$datelast=strtotime($datelast);

$var_days = (time() - $datefirst);

$q="SELECT COUNT(id) AS AntallPoster  from article";
$result= mysql_query($q, $connection) or die
("Could not execute query : $q." . mysql_error());

$antall_poster = mysql_result($result,0,"AntallPoster");

$tidprpost= $var_days / $antall_poster;


$dager  = floor( $tidprpost / 86400);
$timer = floor(($tidprpost - $dager * 86400) / 3600);
$minutter = floor(($tidprpost - $dager * 86400 - $timer * 3600) / 60);
$sekunder =  floor($tidprpost - $dager * 86400 - $timer * 3600 - $minutter * 60);
echo "<br>";
echo "Det har i gjennomsnitt gått $dager dager $timer timer $minutter minutter  $sekunder sekunder mellom hver gang noe har blitt postet";

?>

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...