2015-02-09 4 views
0

У меня плохое преобразование этого подзапроса в laravel. Может кто-то помочь мне преобразовать эту длинную очередьКак преобразовать этот запрос в laravel

SELECT 
    rescue_units.id as 'rescue_units_id', 
    name, 
    address, 
    lat, 
    lng, 
    email, 
    type, 
    status, 
    (6371 * acos(cos(radians(10.3099568)) * cos(radians(lat)) * cos(radians(lng) - radians(123.8934193)) + sin(radians(10.3099568)) * sin(radians(lat)))) AS distance 
FROM rescue_units 
WHERE rescue_units.id = ANY (
    SELECT ru_id 
    FROM ru_ec 
    WHERE ec_id = (
     SELECT id 
     FROM emergency_codes 
     WHERE ID = 6 
    ) 
) 
AND 
status = 1 
order by distance 

EDIT: Это то, что я пытался до сих пор.

$markersByRadius = RescueUnit::select(
       DB::raw("rescue_units.id as 'rescue_units_id', name, address, lat, lng, email, type, status, 
        (6371 * acos(cos(radians(?)) * cos(radians(lat)) * cos(radians(lng) - radians(?)) + sin(radians(?)) * sin(radians(lat)))) AS distance 
        FROM rescue_units WHERE rescue_units.id = ANY (SELECT ru_id FROM ru_ec WHERE ec_id = (SELECT id FROM emergency_codes WHERE ID = ?)) AND status = 1 order by distance")) 
       ->take($limit) 
       ->setBindings([$lat, $lng, $lat, $ec_id]) 
       ->get(); 

     return $markersByRadius; 

И это ошибка:

SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE rescue_units.id = ANY (SELECT ru_id FROM ru_ec WHERE ec_id = (SELECT id FR' at line 3 (SQL: select rescue_units.id as 'rescue_units_id', name, address, lat, lng, email, type, status, (6371 * acos(cos(radians(10.3099568)) * cos(radians(lat)) * cos(radians(lng) - radians(123.8934193)) + sin(radians(10.3099568)) * sin(radians(lat)))) AS distance WHERE rescue_units.id = ANY (SELECT ru_id FROM ru_ec WHERE ec_id = (SELECT id FROM emergency_codes WHERE ID = 6)) AND status = 1 from `rescue_units` order by `distance` asc limit 3) 
+0

Пожалуйста, напишите, что вы пробовали до сих пор. –

+0

@JoelHinz здесь, пожалуйста, проверьте ... – user352156

+0

Что не работает, какие ошибки? – Matheno

ответ

0

Пожалуйста, проверьте это не проверял, но он должен работать. только часть, которую вы делаете неправильно, была sub query.

$markersByRadius = RescueUnit::select(
       DB::raw("rescue_units.id as 'rescue_units_id', name, address, lat, lng, email, type, status, 
        (6371 * acos(cos(radians(?)) * cos(radians(lat)) * cos(radians(lng) - radians(?)) + sin(radians(?)) * sin(radians(lat)))) AS distance")) 
        ->where('rescue_units.id', function($query) 
          { 
           $query->select(DB::raw('ru_id')) 
             ->from('ru_ec') 
             ->where('ru_ec.ec_id', function($query) 
          { 
           $query->select(DB::raw('id')) 
             ->from('emergency_codes') 
             ->where('ID = ?') 
             ->where('status','1') 
             ->orderBy('distance', 'ASC'); 
          })); 
          }) 

       ->take($limit) 
       ->setBindings([$lat, $lng, $lat, $ec_id]) 
       ->get();