У меня есть база данных 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
Иногда он возвращает правильный вывод, иногда он возвращает неправильный вывод, я не могу понять, что не так с этим запросом. У кого-нибудь есть идеи.
Надеюсь, вы поймете мою проблему:)