情况
我有一个tabe userproducts
存储产品,我有一个表offers
,它存储产品的所有竞争对手。另外我还有另一个名为sellers
的表,它存储有关卖家/竞争对手的信息。
我想要什么
我现在想要,我可以搜索我的产品,并获取lowest_price
和name of this competitor
的信息。
我有什么
我做到目前为止,我可以说它会给我最低价格和一个asin(=产品)的名称。在这里。
SELECT (o.price+o.shipping) AS lowest_price,
s.seller_name AS seller_name
FROM offers AS o
LEFT JOIN sellers AS s
ON (o.userinfos_id = s.userinfos_id
AND o.marketplace_id = s.marketplace_id
AND o.merchant_id = s.seller_id)
WHERE o.userinfos_id = ?
AND o.marketplace_id = ?
AND o.asin = ?
AND o.merchant_id != ?
ORDER BY
(o.price+o.shipping) ASC
LIMIT 1)
如果您在此处发现任何性能泄漏,请随时报告
缺少什么
但是,缺少的是我如何获得所有我的asins的这些信息。不只是一个人。我看不到丢失的链接。我尝试了一个解决方案,我将其设置为子查询并将其放在SELECT
中,如下所示:
SELECT userproducts.*,
( "HERE the query from the top )
FROM userproducts
WHERE ...
但结果却是MySQL用这个错误消息回复了我
SQLSTATE [21000]:基数违规:1241操作数应包含1列
我只是想搜索我的产品,而mysql也应该回复有关lowest_price
的信息。你能帮我查询一下吗?
答案 0 :(得分:1)
SELECT userproducts.*,
topQuery.*
FROM userproducts,
( "HERE the query from the top ) topQuery
WHERE ..
答案 1 :(得分:0)
我不知道你的表结构和连接条件,但也许这个例子很有用:
SELECT u.field1, u.field2,
min(o.price+o.shipping) AS lowest_price,
s.seller_name AS seller_name
FROM userproducts u
LEFT JOIN offers AS o
ON o.userinfos_id = u.userinfos_id
AND o.marketplace_id = u.marketplace_id
AND o.asin = u.asin
AND o.merchant_id = u.merchant_id
LEFT JOIN sellers AS s
ON (o.userinfos_id = s.userinfos_id
AND o.marketplace_id = s.marketplace_id
AND o.merchant_id = s.seller_id)
GROUP BY u.field1, u.field2, s.seller_name