Как объединить 2 сложных запроса SQL в 1 - PullRequest
0 голосов
/ 06 января 2012

У меня есть база пользователей, которая выглядит примерно так:

| 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  |

Я искал в интернете и нашел 2 очень полезных запроса, которые позволяют мне вычислить расстояние и возраст конкретного пользователя. Вот запрос расстояния, который я придумал:

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

Это дает мне результат всех пользователей в моей базе данных, которая находится в 15 милях или меньше от меня. Вот запрос возраста:

    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

Я хотел бы объединить эти запросы таким образом, чтобы пользователь мог искать других пользователей, которые находятся на расстоянии менее X миль и старше Y, но моложе Z

Как я могу объединить эти запросы в один? Я не очень хорошо разбираюсь в SQL-запросах и не знаю, как продолжить.

1 Ответ

2 голосов
/ 06 января 2012
Select 
  username,
  (age_stuff) as age,
  (distance_stuff) as distance
from userList
where 
  distance < 15
  and age < 24 and age > 64
order by distance
limit 30 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...