Avatar billede nemlig Professor
08. april 2013 - 20:48 Der er 8 kommentarer og
1 løsning

Select poster der er mindre end 15 min. gamle

Hejsa.
Jeg er begyndt at anvende MySQLi efter Olebole's super-guide .

Jeg har en tabel, hvor et af felterne `tid` er i formattet 'datetime'.
Jeg vil gerne tælle antal poster, hvor feltet `tid` har en værdi, der er mindre end 15 minutter fra nu.
Kan jeg mon få lidt hints til det.

if ($stmt = $mysqli->prepare('SELECT `id`, `tid` FROM `cronjob` WHERE `tid` > ? AND `server` = ?')) {
    $stmt->bind_param('ss', $now, $server);
    $now = date("Y-m-d H:i:s");
    $server = 'wannafind';
    $stmt->execute();
    $stmt->bind_result($id, $tid);
    while ($stmt->fetch()) {
        echo $id . ' ' . $tid . '<br>';
    }
    $stmt->close();
}
Avatar billede nemlig Professor
08. april 2013 - 21:08 #1
Jeg kan godt løse det ved hjælp af strtotime() og trække 15*60 fra tiden.

Men det er vel mere elegant, at klare det i MySQL.
Avatar billede erikjacobsen Ekspert
08. april 2013 - 21:53 #2
Du kan sikkert bruge noget i retning af

  DATE_ADD(`tid`, INTERVAL 15 MINUTE) <= NOW()
Avatar billede erikjacobsen Ekspert
08. april 2013 - 21:55 #3
Ok, hvis det er indenfor de sidste 15 minutter, så skal du vende lighedstegnet.
Avatar billede nemlig Professor
08. april 2013 - 22:34 #4
Tak Erik. Det spiller... :)

Men jeg er usikker på, om jeg har unødvendig kode med, da jeg i princippet kun vil tælle posterne.
Kan du nemt se, om der er noget overflødigt?

if ($stmt = $mysqli->prepare('SELECT `id` FROM `cronjob` WHERE DATE_ADD(`tid`, INTERVAL 15 MINUTE) >= NOW() AND `server` = ?')) {
    $stmt->bind_param('s', $server);
    $server = 'wannafind';
    $stmt->execute();
    $stmt->bind_result($id);
    $stmt-> fetch();
    $stmt->store_result();
    $rows = $stmt->num_rows;  //Tæl antal resultater
    $stmt->close();
    echo $rows;
}
Avatar billede erikjacobsen Ekspert
08. april 2013 - 22:38 #5
Ja, det er overflødigt arbejde. Du kan bedre:

  SELECT COUNT(*) FROM ...

Så får du een række med eet felt, som indeholder antallet. Det vil være lidt hurtigere - især hvis der er mange rækker.
Avatar billede nemlig Professor
08. april 2013 - 22:59 #6
Hmmm - beklager jeg ikke lige har fanget det.

Hvordan udskriver jeg så resultatet?

OG kan jeg ikke fx udelade linjen:

$stmt->bind_result($id);
Avatar billede erikjacobsen Ekspert
08. april 2013 - 23:00 #7
Nej. Men $id indeholder så netop det antal du eftersøger. Måske man skulle kalde det noget andet så ...
Avatar billede nemlig Professor
08. april 2013 - 23:11 #8
OK, så laver jeg det fx sådan her:

.....SELECT COUNT(*) as `antal`.....
....
    $stmt->bind_result($antal);
....
    Echo $antal;

Ser ud til, at det fungerer.

Tak for dine god bidrag.
Avatar billede nemlig Professor
08. april 2013 - 23:49 #9
Lukker.
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