Да, если выбрать столбец, который не является функционально зависимым от предложения GROUP BY вы получите случайный (*) выбор в MySQL. Это не стандарт ANSI SQL, а другие базы данных выдадут вам ошибку.
Вы хотите, чтобы все рестораны имели меню с более дешевой ценой, чем определенный уровень? Если это так просто, просто добавьте
WHERE rm.price<1000 -- or whatever price
статья.
Однако, если вы хотите сказать, что вы хотите перечислить рестораны с их самым дешевым меню, то вы после этого называетесь групповым минимумом и удивительно сложно сделать в SQL. Есть quite a few подходы к атаке; см. также this question. Вот один с внешнепризматическим себя нулем присоединиться:
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;
Обратите внимание, что, как и многие варианты максимально GROUPWISE это даст вам два результата для одного ресторана, если он имеет два же цены дешевого меню.
(*: на самом деле вы, как правило, получаете первую строку в порядке хранения MySQL, которая много времени будет первой, которую вы поместили в базу данных, которая немного ловушка, потому что иногда это то, что вы хотите так что, похоже, он работает, пока порядок не изменится по какой-то причине, и все пошло не так. Опасно!)
Это решение дает мне минимальную цену, но у меня все еще есть неправильный menu.id –
Я добавил MIN (цена) в предложение HAVING вместо предложения SELECT – Natim
По-прежнему цена не является ценой menu_id ... – Natim