Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 限制在子查询中不起作用_Mysql - Fatal编程技术网

Mysql 限制在子查询中不起作用

Mysql 限制在子查询中不起作用,mysql,Mysql,我已将车辆类型保存在“车辆类型”中,将驾驶员保存在“驾驶员”中,并将驾驶员的当前位置保存在“驾驶员当前位置”表中 逻辑:我试图从主查询中获取所有车辆类型,然后尝试从满足实现条件的驾驶员表中为每个类别选择5个驾驶员。如果所有类别的记录小于5,则其正常工作,否则返回类别中存在的所有驱动程序的记录。限制似乎不起作用 我的问题是: SELECT vtl.vehicle_type_id as id ,vtl.name, ( SELECT GROUP_CONCAT(concat( d

我已将车辆类型保存在“车辆类型”中,将驾驶员保存在“驾驶员”中,并将驾驶员的当前位置保存在“驾驶员当前位置”表中

逻辑:我试图从主查询中获取所有车辆类型,然后尝试从满足实现条件的驾驶员表中为每个类别选择5个驾驶员。如果所有类别的记录小于5,则其正常工作,否则返回类别中存在的所有驱动程序的记录。限制似乎不起作用

我的问题是:

SELECT vtl.vehicle_type_id as id ,vtl.name, (
    SELECT GROUP_CONCAT(concat(
        drv.id,'----', drv.firstname, '----', ifnull(drv.lastname,''), '----', 
        dll.latitude, '----', dll.longitude) SEPARATOR '--++--')
    FROM drivercurrentlocation as dll LEFT JOIN drivers as drv ON 
    (dll.driverid = drv.id) WHERE drv.active_vehicle_id > 0 AND 
    current_duty_status='F' and drv.status='A' and drv.onduty='Y' AND 
    drv.vehicle_type_id= vtl.vehicle_type_id AND latitude > '". 
    $latLongData['minLat']."' AND latitude < '". $latLongData['maxLat'] ."' 
    AND longitude > '". $latLongData['minLng'] ."' AND longitude < '". 
    $latLongData['maxLng']."' limit 5) 
as ddata FROM vehicle_types_locales 
WHERE vtl.status  = 'A' AND vtl.language_id = '$languageid'";
请帮助我解决此限制问题


提前感谢

我想您需要将限制从5更改为限制0,5。这是在MySQL中限制数据的正确方法。注意:使用Group_concat时,限制条件将不起作用。 要实现limit,请放置一个子查询并像这样限制行

SELECT vtl.vehicle_type_id as id ,vtl.name, (
    SELECT GROUP_CONCAT(concat(
        newdrv.id,'----', newdrv.firstname, '----', ifnull(newdrv.lastname,''), '----', 
        newdrv.latitude, '----', newdrv.longitude) SEPARATOR '--++--') from           (select drv.id, drv.firstname, ifnull(drv.lastname,''), 
        dll.latitude,dll.longitude
    FROM drivercurrentlocation as dll LEFT JOIN drivers as drv ON 
    (dll.driverid = drv.id) WHERE drv.active_vehicle_id > 0 AND 
    current_duty_status='F' and drv.status='A' and drv.onduty='Y' AND 
    drv.vehicle_type_id= vtl.vehicle_type_id AND latitude > '". 
    $latLongData['minLat']."' AND latitude < '". $latLongData['maxLat'] ."' 
    AND longitude > '". $latLongData['minLng'] ."' AND longitude < '". 
    $latLongData['maxLng']."' limit 5) newdrv ) 
as ddata FROM vehicle_types_locales 
WHERE vtl.status  = 'A' AND vtl.language_id = '$languageid'";

在花了很多时间之后,我找到了一个解决方案

SELECT vtl.vehicle_type_id as id ,vtl.name, (
    SELECT substring_index(GROUP_CONCAT(concat(drv.id,'----
    ',drv.firstname, '----', ifnull(drv.lastname,''), '----', dll.latitude, 
    '----', dll.longitude) SEPARATOR '--++--'),'--++--',$no_of_drivers) 
    FROM drivercurrentlocation as dll LEFT JOIN drivers as drv ON 
    (dll.driverid = drv.id) WHERE drv.active_vehicle_id > 0 AND 
    current_duty_status='F' and drv.status='A' and drv.onduty='Y' AND 
    drv.vehicle_type_id= vtl.vehicle_type_id AND latitude > '". 
    $latLongData['minLat']."' AND latitude < '". $latLongData['maxLat']
    ."' AND longitude > '". $latLongData['minLng'] ."' AND longitude < '". 
    $latLongData['maxLng']."' ) 
as ddata FROM vehicle_types_locales as vtl 
WHERE vtl.status  = 'A' AND vtl.language_id = '$languageid'";
通过这个查询,我找到了所需的输出

谢谢你的回答