webForumDet fria alternativet

INTERVAL vs UNIX_TIMESTAMP?

Databaser & SQL

6 svar · 458 visningar · startad av Guldstrand

Medlem sedan juli 20041 271 inlägg
Frågan#1

Vilket sätt är "bäst" att använda?

// Alt. 1
$sql = mysql_query('SELECT COUNT(id) AS num_mem FROM users WHERE ADDDATE(added, INTERVAL 1 DAY) > NOW()');
$medlemmar = mysql_result($sql,0);

//Alt. 2
$medlemmar = number_format(get_row_count("users", "WHERE UNIX_TIMESTAMP(" . get_dt_num() . ") - UNIX_TIMESTAMP(added) < 86400"));
function get_dt_num()
{
  return gmdate("YmdHis");
}

Båda alternativen visar "fel" antal. :o

Medlem sedan dec. 20025 483 inlägg
#2
  1. Vilket resultat får du och vilket resultat förväntade du dig?
  2. Hur vet du att du får fel antal?
Medlem sedan juli 20041 271 inlägg
#3

Peter S skrev:

  1. Vilket resultat får du och vilket resultat förväntade du dig?
  2. Hur vet du att du får fel antal?

Jag får fler resultat än vad som "stämmer".
Verkar som att jag även får resultat för igår. :x

Medlem sedan juli 20041 271 inlägg
#4
// Alt. 1
$sql = mysql_query('SELECT COUNT(id) AS num_mem FROM users WHERE ADDDATE(added, INTERVAL 1 DAY) > NOW()');
$medlemmar = mysql_result($sql,0);
 
//Alt. 2
$medlemmar = number_format(get_row_count("users", "WHERE UNIX_TIMESTAMP(" . get_dt_num() . ") - UNIX_TIMESTAMP(added) < 86400"));

..ger precis samma resultat, (som är fel).

Medlem sedan dec. 20025 483 inlägg
#5

Testa att se vad du får med "SELECT NOW(), ADDDATE(added, INTERVAL 1 DAY) FROM users ORDER BY id LIMIT 10". Då ser du om ADDATE() gör vad du tror att den gör.

Medlem sedan juli 20041 271 inlägg
#6

Valde att använda följande kod istället.

$medlemmar = number_format(get_row_count("users", "WHERE UNIX_TIMESTAMP(" . get_dt_num() . ") - UNIX_TIMESTAMP(added) < 86400"));

Verkar fungera nu helt plötsligt. (Gjorde inte det innan.) :o

EDIT: Om jag testar liknande för hur många inlägg som har postats IDAG, så får jag 20 istället för 14 (som är rätt).

$inlagg_dag = number_format(get_row_count("posts", "WHERE UNIX_TIMESTAMP(" . get_dt_num() . ") - UNIX_TIMESTAMP(added) < 86400"));

Ger f*n upp snart. :(

Medlem sedan juli 20041 271 inlägg
#7

Vill alltså endast visa hur många som har reggat sig under dagen IDAG (2009-01-21) fram till nuvarande tid (22:41).

EDIT: Har löst det.

$medlemmar = number_format(get_row_count("users", "WHERE added >= DATE(NOW())"))

;

251 ms totalt · 3 externa anrop · v20260731065814-full.c4b5ca48
125 ms — deklarationer (db)
0 ms — hämta statistik (cache)
124 ms — hämta tråd, inlägg och bilagor (db)