mysql как присоединиться к ближайшей дистанции - PullRequest
0 голосов
/ 17 июня 2020

Я использую MySQL с PHP, у меня есть таблица хранилища и таблица филиалов хранилища, мне нужно получить магазины с ближайшим именем ветки и идентификатором

таблицы

1 - магазины

|---------------------|------------------| 
|         id          |     name         |
|---------------------|------------------|
|          1          |     store1       |
|---------------------|------------------|
|          2          |    store 2       |
------------------------------------------

2- store_branches

    |---------------------|------------|------------------| --------------|-------------|
    |         id          |  store_id  |     name         |   lat         |   lng       |
    |---------------------|------------|------------------|---------------|-------------|
    |          1          |      1     |     branch x     |   30.134166   |  31.384267  |
    |---------------------|------------|------------------|---------------|-------------|
    |          2          |      1     |     branch y     |   31.134168   |  32.384267  |
    |---------------------|------------|------------------|---------------|-------------|
    |          3          |      2     |     branch v     |   34.134140   |  36.384267  |
    |---------------------|------------|------------------|---------------|-------------|
    |          1          |      2     |     branch f     |   36.134181   |  31.384267  |
    |---------------------|------------|------------------| --------------|-------------|

мне нужно получить список магазинов с ближайшей веткой от пользователя

предположим, что пользователь lat = 30.0736176 & lng = 31.3418702

слышит, как я пытался это сделать

select `store_branches`.`id` as `branch_id`, `stores`.`id` as `store_id`, `stores`.`name` as `store_name`  
from `stores` 
inner join `store_branches` on stores.id = (
                        SELECT `id` 
                        from `store_branches` 
                        WHERE store_branches.store_id = stores.id
                        order by POW(69.1 * (store_branches.lat - '30.0736176' ), 2) +
                        POW(69.1 * ( '31.3418702' - store_branches.lng) * COS(store_branches.lat / 57.3), 2) asc 
                        limit 1
                     )
 group by `stores`.`id`

, но он не работает должным образом

так как сделать это?

1 Ответ

0 голосов
/ 17 июня 2020

Вы не должны использовать group by без функции агрегации в mysql версии> 5.6, вызывая ошибку для других, versuib дает непредсказуемый результат ... используйте отличный, если вы не хотите дублировать результат

    Select DISTINCT `store_branches`.`id` as `branch_id`, `stores`.`id` as `store_id`, `stores`.`name` as `store_name`  
    from `stores` 
    inner join `store_branches` on stores.id = (
                            SELECT `id` 
                            from `store_branches` 
                            WHERE store_branches.store_id = stores.id
                            order by (POW(69.1 * (store_branches.lat - 30.0736176 ), 2) +
                            POW(69.1 * ( 31.3418702 - store_branches.lng) * COS(store_branches.lat / 57.3), 2)) asc 
                            limit 1
                         )

и для числа не следует использовать кавычки

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...