MySQL查询一对多关系,只返回一行
形势MySQL查询一对多关系,只返回一行,mysql,sql,Mysql,Sql,形势 我有一个表userproducts,用于存储产品,还有一个表offers用于存储产品的所有竞争对手。另外,我还有一个名为sellers的表,其中存储了有关卖家/竞争对手的信息 我想要什么 我现在想,我可以通过我的产品搜索,也可以获得最低价格的信息,以及这个竞争对手的名字 我拥有的 我做到了这一点,我可以说它会给我一个asin(=产品)的最低价格和名称。给你 SELECT (o.price+o.shipping) AS lowest_price, s.seller_name A
我有一个表
userproducts
,用于存储产品,还有一个表offers
用于存储产品的所有竞争对手。另外,我还有一个名为sellers
的表,其中存储了有关卖家/竞争对手的信息
我想要什么我现在想,我可以通过我的产品搜索,也可以获得最低价格的信息,以及这个竞争对手的名字 我拥有的
我做到了这一点,我可以说它会给我一个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)
如果您在这里看到任何性能泄漏,请随时报告
缺少什么但我缺少的是如何为我所有的ASIN获取这些信息。不仅仅是一个人。我看不到丢失的链接。我尝试了一种解决方案,将其添加到子查询中,并将其放入
SELECT
中,如下所示:
SELECT userproducts.*,
( "HERE the query from the top )
FROM userproducts
WHERE ...
但结果是,MySQL给了我这个错误消息
SQLSTATE[21000]:基数冲突:1241个操作数应包含1列
我只想搜索我的产品,mysql也应该给我返回关于
最低价格的信息。您能帮我进行查询吗?我不知道您的表结构和联接条件,但这个示例可能会有用:
SELECT userproducts.*,
topQuery.*
FROM userproducts,
( "HERE the query from the top ) topQuery
WHERE ..
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
您的问题不清楚,但您需要的是所有产品的最低价格,而不是一个产品的最低价格,因此您可以使用选择最低价格(o.price+o.shipping)]。。。。。按o.asin`removeLIMIT 1和o.asin=?
分组我想,我庆祝得有点早了。此时,他会退回正确的产品,也会退回最低的价格,但不是针对特定的产品,而是针对相同的产品。我必须在我的topQuery
上更改什么?那么您不需要限制1,而是应该计算每个产品id的卖家名称和最低价格。我猜您应该在顶部查询中添加GROUP BY product id,然后您可以加入userproducts和topQuery on product id