2017-02-17 6 views
0

Я использую базу данных mysql для хранения компаний в одном городе. И я получаю их, используя следующий запрос. Однако он не сортирует результат так, как я хочу. Я хочу, чтобы результирующие компании были заказаны следующим образом: Первым приоритетом являются компании, расстояния которых ниже 6 KM, и эти компании должны быть заказаны по FIELD (sectorid, ....) параметр, второй приоритет это компании, расстояния которых больше 6KM, и эти компании должны заказываться одинаково (с параметром FIELD)mysql несколько столбцов порядка

Но мы не смогли найти какое-либо решение нашей проблемы. Я показываю правильные результаты и наш запрос ниже. Я был бы рад, если кто-то укажет мне правильное направление

Пример Результат Должно быть что-то вроде этого:

Company Name:  Distance:  SectorID: 
CompanyA    3    10 
CompanyB    2    11 
CompanyC    4    13 
CompanyX    8    10 
CompanyY    7    11 
CompanyZ    9    13 

Выгодная Запрос:

SELECT companies.id, 
     companies.name, 
     companies.summary, 
     companies.ratingScore, 
     companies.companyLogo, 
     companies.sectorId, 
     companies.lattitude, 
     companies.longitude, 
     companies.address, 
     company_photos.photoUrl, 

    (SELECT EXISTS 
    (SELECT 1 
     FROM favorites 
     WHERE favorites.companyId = companies.id 
     AND userId = 109)) AS favorited, 

    (SELECT COUNT(*) 
    FROM ratings 
    WHERE companies.id = ratings.companyId 
    AND ratings.isReviewed = 1) AS comments, 
     (ACOS(SIN(RADIANS(41.212641))*SIN(RADIANS(lattitude))+COS(RADIANS(41.212641))*COS(RADIANS(lattitude))*COS(RADIANS(longitude)-RADIANS(29.020058))) *6371) AS distance 
FROM companies 
LEFT JOIN company_photos ON company_photos.companyId = companies.id 
AND company_photos.photoOrder = 0 
WHERE companies.isActivated = 1 
    AND companies.isReviewed = 1 
    AND companies.isCustomer = 1 
    AND companies.isBlocked = 0 
ORDER BY FIELD (sectorId, 10, 11, 13, 7, 12, 2, 15, 17), distance 

Результат I» m Получение:

Company Name:  Distance:  SectorID: 
CompanyA    3    10 
CompanyX    8    10 
CompanyB    2    11 
CompanyY    7    11 
CompanyC    4    13 
CompanyZ    9    13 

Благодаря

+0

Какой результат вы получаете? –

+0

UNION ALL, используя 6KM меньше, чем правило. – user3741598

+0

Также вам нужна запятая в вашем ORDER BY. Он должен читать ORDER BY FIELD (sectorId, 10, 11, 13, 7, 12, 2, 15, 17), расстояние –

ответ

0
order by case when distance<6 then 1 else 2 end, --sorts distance < 6 first and then distance > 6 
sectorid --with in each group specified above sorting is on sectorid 
+0

случай, когда caluse не работает я хочу. Потому что в обоих случаях я хочу, чтобы один и тот же порядок с отраслевой разницей был единственным. Первое, что я хочу показать ближайшим компаниям с тем же порядком упорядочения, тогда я хочу показать далекие компании с таким же порядком упорядочения – tolgatanriverdi

+0

. Это работает здесь. Http: //rextester.com/ZKL14522 –

 Смежные вопросы

  • Нет связанных вопросов^_^