嵌套的相关子查询(第二顺序)无法访问主查询(MySQL)
我正试着做这样的事情 编辑-整个查询嵌套的相关子查询(第二顺序)无法访问主查询(MySQL),mysql,Mysql,我正试着做这样的事情 编辑-整个查询 SELECT * FROM ride WHERE ( SELECT COUNT(*) FROM ( SELECT DISTINCT mobile FROM contacts WHERE `contacts`.`user_mobile` = '".$user_mobile."' UNION ALL SELECT DISTINCT mobile FROM contacts WHERE `contacts`
SELECT *
FROM ride
WHERE
(
SELECT COUNT(*) FROM (
SELECT DISTINCT mobile FROM contacts WHERE `contacts`.`user_mobile` = '".$user_mobile."'
UNION ALL
SELECT DISTINCT mobile FROM contacts WHERE `contacts`.`user_mobile` = `ride`.`user_mobile`
) AS c
) > 1
AND (
distance_geo('".$start_lat."', '".$start_long."', starting_lat, starting_long) < '".$start_radius."'
OR id IN (
SELECT rideid FROM routept WHERE
distance_geo('".$start_lat."', '".$start_long."', starting_lat, starting_long) < '".$start_radius."'
)
)
AND (
distance_geo('".$end_lat."', '".$end_long."', end_lat, end_long) < '".$end_radius."'
OR id IN (
SELECT rideid FROM routept WHERE
distance_geo('".$start_lat."', '".$start_long."', starting_lat, starting_long) < '".$end_radius."'
)
)
AND availablity >= 1
AND start_time BETWEEN '".$start_after."' AND '".$start_before."'
AND start_time > NOW()
ORDER BY start_time ASC"
我认为它不能在嵌套子查询中访问。我需要一个解决办法。我在where条款中有更多的条件,但我只发布了令人不安的部分 试试这个,让我知道
Select contacts.user_mobile // here you can add other columns
, Count(*) as Total
From ride
JOIN mobile On contacts.user_mobile = ride.user_mobile
Where contacts.user_mobile = ".$user_mobile."
Group By contacts.user_mobile
Having Total > 1
更新
上面的Querty是您的基础,现在只需在Where子句中添加其他条件
Select contacts.user_mobile // here you can add other columns
, Count(*) as Total
From ride
JOIN mobile On contacts.user_mobile = ride.user_mobile
Where contacts.user_mobile = ".$user_mobile."
AND distance_geo('".$start_lat."', '".$start_long."',
starting_lat, starting_long) < '".$start_radius."'
OR ride.id IN (
SELECT rideid
FROM routept
WHERE distance_geo('".$start_lat."', '".$start_long."',
starting_lat, starting_long) < '".$start_radius."')
AND distance_geo('".$end_lat."', '".$end_long."',
end_lat, end_long) < '".$end_radius."'
OR ride.id IN (
SELECT rideid
FROM routept
WHERE distance_geo('".$start_lat."', '".$start_long."',
starting_lat, starting_long) < '".$end_radius."')
AND ride.availablity >= 1
AND ride.start_time BETWEEN '".$start_after."' AND '".$start_before."'
AND ride.start_time > NOW()
Group By contacts.user_mobile
Having Total > 1
Order BY ride.start_time ASC"
@他们给了我一个有效的解决方案 工作解决方案:
SELECT contacts.user_mobile , ride.id, ride.user_mobile, ride.vehicle_no, ride.availablity, ride.ride_type, ride.starting_lat,
ride.starting_long, ride.starting_addr, ride.start_city, ride.end_lat, ride.end_long, ride.end_addr, ride.end_city,
ride.vehicle_ac, ride.status, ride.rent, ride.start_time, ride.dept_time,
COUNT(*) as Total
FROM ride
JOIN contacts ON contacts.user_mobile = ride.user_mobile
WHERE contacts.user_mobile = ".$user_mobile."
AND (
distance_geo('".$start_lat."', '".$start_long."', ride.starting_lat, ride.starting_long) < '".$start_radius."'
OR ride.id IN (
SELECT rideid FROM routept WHERE
distance_geo('".$start_lat."', '".$start_long."', ride.starting_lat, ride.starting_long) < '".$start_radius."'
)
)
AND (
distance_geo('".$end_lat."', '".$end_long."', ride.end_lat, ride.end_long) < '".$end_radius."'
OR ride.id IN (
SELECT rideid FROM routept WHERE
distance_geo('".$start_lat."', '".$start_long."', ride.end_lat, ride.end_long) < '".$end_radius."'
)
)
AND ride.availablity >= 1
AND ride.start_time BETWEEN '".$start_after."' AND '".$start_before."'
AND ride.start_time > NOW()
GROUP BY contacts.user_mobile
HAVING Total > 1
ORDER BY ride.start_time ASC"
谢谢@The.是的,你是对的,它不能在嵌套子查询中访问。但我需要一个解决方案。我怎样才能做这样的工作呢?你能解释一下你在查询中的逻辑吗?因为它很难理解。谢谢,我坐桌子兜风。我有另一个表联系人,其中存储了姓名、号码和用户\u mobile。为每个移动用户保存的联系人详细信息数量很少。用户_mobile也在骑乘中。我想选择骑乘设备的用户_mobile和工作用户的用户_mobile之间的相互联系次数,我将其作为PHP变量提供。距离_geo这是您的函数?我已更新了整个查询!我是新来的SQL帮助大家完成它,请。谢谢。在我之前说过的相同描述中,我现在有了caluse的其他标准。我现在需要一个解决方法。它总是给我0个结果!:@这个
SELECT contacts.user_mobile , ride.id, ride.user_mobile, ride.vehicle_no, ride.availablity, ride.ride_type, ride.starting_lat,
ride.starting_long, ride.starting_addr, ride.start_city, ride.end_lat, ride.end_long, ride.end_addr, ride.end_city,
ride.vehicle_ac, ride.status, ride.rent, ride.start_time, ride.dept_time,
COUNT(*) as Total
FROM ride
JOIN contacts ON contacts.user_mobile = ride.user_mobile
WHERE contacts.user_mobile = ".$user_mobile."
AND (
distance_geo('".$start_lat."', '".$start_long."', ride.starting_lat, ride.starting_long) < '".$start_radius."'
OR ride.id IN (
SELECT rideid FROM routept WHERE
distance_geo('".$start_lat."', '".$start_long."', ride.starting_lat, ride.starting_long) < '".$start_radius."'
)
)
AND (
distance_geo('".$end_lat."', '".$end_long."', ride.end_lat, ride.end_long) < '".$end_radius."'
OR ride.id IN (
SELECT rideid FROM routept WHERE
distance_geo('".$start_lat."', '".$start_long."', ride.end_lat, ride.end_long) < '".$end_radius."'
)
)
AND ride.availablity >= 1
AND ride.start_time BETWEEN '".$start_after."' AND '".$start_before."'
AND ride.start_time > NOW()
GROUP BY contacts.user_mobile
HAVING Total > 1
ORDER BY ride.start_time ASC"