J'ai une base de données complète des utilisateurs qui ressemble à peu près comme ceci:Comment combiner 2 requêtes SQL complexes en 1
| id | username | birthdate | sex | zip_code | latitude | longitude |
|----+----------+------------+-----+----------|-----------+------------|
| 1 | userA | 1986-04-05 | M | 90210 | 34.088808 | -118.40612 |
| 2 | userB | 1984-08-15 | F | 10011 | 40.741012 | -74.00012 |
| 3 | userC | 1984-11-25 | F | 10014 | 40.734718 | -74.00532 |
J'ai cherché sur internet et a trouvé 2 requêtes très utiles qui me permettent de calculer la distance et l'âge d'un utilisateur particulier. Voici la requête de loin, je suis venu avec:
SELECT username, (
(
ACOS(SIN($latitude * PI() /180) * SIN(latitude * PI() /180) + COS($latitude * PI() /180) * COS(latitude * PI() /180) * COS((
$longitude - longitude
) * PI() /180)) *180/PI()
) *60 * 1.1515
) AS `distance`
FROM `userList`
HAVING `distance` <=15
ORDER BY `distance` ASC
LIMIT 0 , 30
Cela me donne un résultat de tous les utilisateurs dans ma base de données qui est situé à 15 miles ou moins de moi. Voici la requête d'âge:
SELECT username, YEAR(CURDATE()) - YEAR(birthdate) - IF(STR_TO_DATE(CONCAT(YEAR(CURDATE()) , '-', MONTH(birthdate) , '-', IF(MONTH(birthdate) =2
AND DAY(birthdate) =29, DAY(DATE_ADD(CONCAT(YEAR(CURDATE()) , '-03-01') , INTERVAL -1
DAY)) , DAY(birthdate))) , '%Y-%c-%e') > CURDATE() , 1, 0) AS age
FROM userList
LIMIT 0 , 30
Ce que je voudrais faire est de combiner ces requêtes de telle manière où un utilisateur peut rechercher d'autres utilisateurs qui sont situés à moins de miles X loin et plus que Y, mais plus jeune alors Z
Comment puis-je combiner ces requêtes en une seule? Je ne suis pas très bien parcouru dans les requêtes SQL et je ne sais pas comment procéder.
ne comprenait pas Lieven's Post non plus. Tout faire une fois semble plus intelligent. @Xecure vous pourriez envisager de ne pas calculer l'âge chaque fois que vous sélectionnez quelque chose. En cas de charge lourde et lourde, cela pourrait poser problème. – Harry
@Harry Bien que toutes les recherches demandées par un utilisateur aient un champ ageMin et ageMax, je prévoyais de supprimer le calcul d'âge si le champ ageMin était le plus bas possible et ageMax le plus élevé possible. Je ne vois pas d'autre moyen de contourner cela. – Xecure