2017-04-01 2 views
3

Ich habe Fahrzeugtypen in "vehicle_types_locales", Treiber in "Treiber" und aktuelle Position des Fahrers in "drivercurrentlocation" -Tabelle gespeichert.Limit funktioniert nicht in Unterabfrage

Logic: Ich versuche, alle Fahrzeugtypen von der Hauptabfrage zu bekommen und dann zu versuchen, 5 Fahrer für jede Kategorie von den Tischen des Fahrers zu wählen, die erfüllende Bedingungen wie eingeführt. Wenn Datensätze weniger sind als 5 für alle Kategorien dann es funktioniert gut sonst gibt es existieren Fahrer in der Kategorie (scheint Grenze nicht in Betrieb)

Meine Frage ist:.

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

Bitte helfen Sie mir, diese Grenze zu lösen Problem.

Vielen Dank im Voraus

Antwort

0

Ich glaube, Sie LIMIT 5-LIMIT 0,5 ändern müssen. Dies ist der richtige Weg, um Daten in MySQL zu begrenzen.

0

Hinweis: Die Bedingung für die Begrenzung funktioniert nicht, wenn Sie Group_concat verwenden. Um das zu erreichen Grenze eine Unterabfrage setzen und begrenzt die Zeilen etwas wie diese

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

Nach vielen Stunden zu investieren, ich habe eine Lösung gefunden.

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

mit dieser Abfrage habe ich gewünschte Ausgabe gefunden.

Vielen Dank für Ihre Antworten.

Verwandte Themen