Несколько СОЕДИНЕНИЙ с GROUP BY, возвращающими неверные данные в MYSQL - PullRequest
1 голос
/ 25 февраля 2020

У меня есть база данных MySQL, в которой есть следующие таблицы продавцы, product_additional, корзина

Столбцы корзины

id|user_id|product_id|quantity|seller_id

Продукт Дополнительные столбцы

product_id|price|seller_id|stocks

Колонки продавцов

user_id|store_name|latitude|longitude

MySQL Функция возвращает расстояние в км

getDistance(lat1, long1,lat2, long2)

Проблема

Я хочу, чтобы мой запрос вернул сумму всей цены продукта от 5 различных самых дешевых продавцов, которые находятся на расстоянии около 15 км адрес пользователя.

Price according to sellers in (product_additional table)

product_id|seller_id|price|stock
429       |1        |10   | 10
409       |1        |12   | 10
412       |1        |15   | 10
429       |2        |10   | 10
412       |2        |15   | 10
409       |2        |10   | 10
429       |3        |5    | 10

1 : у меня есть массив идентификаторов продуктов, например: [429, 409]

2 : Запрос вернет только тех продавцов, у которых в магазине есть все вышеуказанные товары (которые указаны в таблице дополнительных товаров)

Ожидаемый результат

Seller_id|price|
2        |20   |
1        |22   |

Обратите внимание, что я нужны только продавцы, у которых есть оба продукта 429, 409 в таблице product_additional, поэтому продавец с id = 3 не отображается выше.

Мой запрос

SELECT SUM(price * quantity) as total_price, products_additional.seller_id
FROM `products_additional`
INNER JOIN (SELECT * FROM cart WHERE user_id='3') as ucart ON `products_additional`.`product_id` = `ucart`.`product_id`
JOIN  (SELECT * FROM sellers WHERE getDistance(latitude, longitude,'28.413911','77.0423371') < 20 ) AS sellers ON `products_additional`.`seller_id`=`sellers`.`user_id`
JOIN (SELECT * FROM users WHERE activated='y') AS users ON `products_additional`.`seller_id`=`users`.`id`
WHERE `products_additional`.`stocks` >= `ucart`.`quantity`
AND `products_additional`.`product_id` IN('429', '409')
GROUP BY `products_additional`.`seller_id`
 LIMIT 5

Иногда он возвращает правильный вывод, иногда он возвращает неправильный вывод, я не могу понять, что не так с этим запросом. У кого-нибудь есть идеи.

Надеюсь, вы поймете мою проблему:)

...