2010-01-25 3 views
3

Je souhaite autoriser mes utilisateurs à rechercher dans la base de données une ligne qui a été soumise un certain jour. La date est entrée dans le champ dans la base de données en utilisant la fonction date() ce qui est super, mais quand j'utilise la fonction php strtotime, bien sûr les dates ne sont pas exactement les mêmes.Comment utiliser la syntaxe mysql "LIKE" avec un horodatage?

Y at-il une fonction mysql intelligente qui peut m'aider avec cela?

Répondre

3

J'ai eu un problème avec cela avant.

Il est préférable de générer une date de début et de fin, puis d'utiliser la fonction BETWEEN à la place.

donc quelque chose comme ceci:

$start_date = "2009-01-01 00:00:00"; 
$end_date = "2009-01-01 23:59:59"; 

$sql = "SELECT * FROM table WHERE date BETWEEN '$start_date' AND '$end_date' AND id = 'x'; 

Bien sûr, vous voulez simplement tirer les dates de la DB en utilisant strtotime et ajoutez l'horodatage - dépend comment vous avez utilisé la date()

Hope this helps:)

+1

Les événements qui se produisent précisément à minuit ne sont-ils pas importants pour vous? (Il y a un écart d'une seconde dans votre clause.) :-) –

+0

Tout à fait raison, oups;) – suitedupgeek

+0

haha ​​et bien j'ai utilisé ceci, mais j'ai fait $ searchingTime-86400 pour le début, puis +86400 pour la fin, donc il recherche dans un jour en arrière et en avant de l'horodatage généré .... c'est assez précis pour donner de bons résultats, mais peut parfois être un peu vague – tarnfeld

0

PHP:

$timestamp_from_php = strtotime('December 25, 2009'); 

SQL:

select 
    `fields` 
from 
    Table t 
where 
    date_format('Y-m-d', t.`datetime_field`) = date_format('Y-m-d', '$timestamp_from_php') 
2

Vous pouvez utiliser la fonction DATE() de MySQL pour extraire une partie de date de l'horodatage:

select ... from table ... where DATE(date_column) = '2010-01-25'; 

Si vous avez des problèmes soumettre '2010-01-25' de PHP, vous pouvez utiliser PHP de date function avec « Ymd 'comme paramètre pour obtenir seulement la partie de date.

$d = date('Y-m-d', strtotime(...)); 

En regardant votre question de près, il semble que vous aurez besoin de ces deux. Utilisez d'abord la fonction date de PHP pour obtenir uniquement la partie date, puis utilisez la date de MySQL pour ne faire correspondre que ces enregistrements.