2011-10-04 4 views
1

Ceci est la table Histoire:Sélectionnez les résultats basés sur la date, mais sachant l'ID

URL | UID | Method | Tag | Date 

Et cette requête:

$data = mysql_query(" 
     select * from History 
     order by `Date` asc   
     "); 

Je dois obtenir les URL qui ont une ancienne date d'un enregistrement.

J'ai seulement l'URL de cet enregistrement. ($ url)

Y a-t-il un moyen de le trouver et de sélectionner les lignes qui viennent dans l'ordre par date?

Je peux exécuter une requête distincte avec le $url pour obtenir sa date mais je veux savoir s'il est possible de le faire avec une requête.

Répondre

3

Vous pouvez utiliser un sous-:

SELECT * 
FROM History 
WHERE Date < (SELECT Date FROM History WHERE url = 'foo') 
ORDER BY Date ASC 

Ajouter un index unique URL pour vous assurer que la sous-requête ne retournera un enregistrement.

+1

Je voudrais également ajouter LIMIT 1' à requête imbriquée – zerkms

+0

ce type de données devrait @ Mark être pour 'date' champ pour l'exécution de la requête ci-dessus? ? – diEcho

+0

@diEcho: Aucune restriction. Si la clause ORDER BY fonctionne correctement, le WHERE devrait aussi. Je suggère datetime. –

0

Ceci est une meilleure performance puis sous-Selects:

SELECT 
    h1.* 
FROM 
    history h1 
INNER JOIN 
    history h2 
ON 
    h2.url = '{URL}' 
WHERE 
    DATEDIFF(h1.`date`,h2.`date`) < 0 
Questions connexes