2017-04-01 70 views
3

我已將'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

我認爲你需要改變從LIMIT 5LIMIT 0,5。這是限制MySQL中數據的正確方法

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'"; 
3

投資很多小時後,我已經找到了解決方案。

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'"; 

使用此查詢我已經找到想要的輸出。

感謝您的回答。