Да, если вы выберите столбец, который функционально не зависит от предложения GROUP BY, вы получите случайный (*) выбор в MySQL. Это не стандарт ANSI SQL, и другие базы данных приведут к ошибке.
Хотите ли вы все рестораны, в которых есть меню по более низкой цене, чем определенный уровень? Если это так, просто добавьте
WHERE rm.price<1000 -- or whatever price
пункт.
Однако, если вы имеете в виду, что хотите перечислить рестораны с их меню с наименьшей ценой, то, что вам нужно, называется групповой минимум , и это удивительно сложно сделать в SQL. Есть довольно много подходов, чтобы атаковать это; см. также этот вопрос . Вот тот, у которого внешнее-нулевое соединение:
SELECT
r.id, rm.id, rm.price, r.moyenne AS note,
get_distance_metres('47.2412254', '6.0255656', map_lat, map_lon) AS distance
FROM restaurant_restaurant AS r
JOIN restaurant_menu rm ON r.id=rm.restaurant_id
LEFT JOIN restaurant_menu AS no_menu ON r.id=no_menu.restaurant_id AND no_menu.price<rm.price
WHERE no_menu IS NULL
AND r.isVisible=1
AND distance<2000
AND rm.price<1000 -- if you only want restaurants with a menu cheaper than certain price
ORDER BY distance
LIMIT 10;
Обратите внимание, что, как и во многих вариантах группового максимума, это даст вам два результата для одного ресторана, если у него есть два самых дешевых меню по одинаковой цене.
(*: на самом деле вы стремитесь получить первую строку в порядке хранения MySQL, который большую часть времени будет первым, который вы поместите в базу данных, что немного ловушка, потому что иногда это именно то, чего вы хотите похоже, он работает, пока заказ не изменился по какой-то причине и все пошло не так. Опасно!)