嵌套的相关子查询(第二顺序)无法访问主查询(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"