我已将车辆类型保存在' vehicle_types_locales'中,驱动程序位于' drivers'和驱动程序当前位置' drivercurrentlocation'表
逻辑:我试图从主查询中获取所有车辆类型,然后尝试从满足实施条件的驾驶员表格中为每个类别选择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'";
请帮我解决此限制问题。
提前致谢
答案 0 :(得分:0)
我认为您需要从LIMIT 5
更改为LIMIT 0,5
。这是限制MySQL中数据的正确方法
答案 1 :(得分:0)
注意:使用Group_concat时,限制条件不起作用。 要实现限制,请设置子查询并将行限制为有点像
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'";
答案 2 :(得分:0)
投入大量时间后,我找到了解决方案。
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'";
通过此查询,我找到了所需的输出。
感谢您的回答。