Php 如何使用GROUPBY子句选择最高匹配的单个值

Php 如何使用GROUPBY子句选择最高匹配的单个值,php,mysql,join,Php,Mysql,Join,第一张表:wp_pc_产品 feed_product_name feed_product_image price deeplink id_merchant sony xperia c3 abc.png 12000 abc.html fkt sony xperia xyz.png 11000 aaa.html snd sony xperia M pqr.png

第一张表:wp_pc_产品

feed_product_name   feed_product_image   price   deeplink    id_merchant
sony xperia c3      abc.png              12000   abc.html     fkt
sony xperia         xyz.png              11000   aaa.html     snd
sony xperia M       pqr.png              10000   bbb.html     fkt
sony xperia z       abc.png              12000   abc.html     fkt
sony xperia z3      xyz.png              11000   aaa.html     snd
sony xperia k       pqr.png              10000   bbb.html     fkt
第二张表:wp_pc_产品_商家

slug     image
fkt      logo1.png
snd      logo2.png
我现有的查询

SELECT p.feed_product_name,
       p.feed_product_image,
       p.price,
       p.deeplink,
       p.id_merchant,
       m.image
FROM wp_pc_products p
JOIN wp_pc_products_merchants m ON m.slug=p.id_merchant
AND (feed_product_name LIKE'%sony%'
     OR feed_product_name LIKE'%xperia%'
     OR feed_product_name LIKE'%c3%')
AND price BETWEEN "11829.3" AND "21968.7"
GROUP BY id_merchant
上述查询不适用于GROUPBY子句。 如何在上述查询中使用group by

将您的查询更改为

select distinct(m.image),p.feed_product_name,p.feed_product_image,p.price,p.deeplink from wp_pc_products p JOIN wp_pc_products_merchants m ON m.slug=p.id_merchant and (p.feed_product_name like'%sony%' or p.feed_product_name like'%xperia%' or p.feed_product_name like'%c3%' ) and p.price BETWEEN "11829.3" and "21968.7" group by p.id_merchant


您几乎应该总是按照您希望返回的任何和所有值进行分组,除了max或grest之类的值。此外,为了获得最高的单个值,您需要将列包装为max。使用GROUP BY无法获得所需的结果。查看您的查询和数据。对于id_merchant='fkt',feed_product_name至少有两个不同的值。对于id为'fkt'的组,MySQL应该在查询中选择哪一个?这样的查询甚至不是有效的SQL。MySQL直到版本5.7.5,并选择其中一个值。它不能保证查询将始终为p.feed\u product\u name返回相同的值。我以前使用过此查询=>选择wp\u pc\u products.*,wp\u pc\u products\u merchants.image,cashback.percentage FROM wp_pc_products JOIN wp_pc_products.id_merchant=wp_pc_products_merchants.slug JOIN cashback ON wp_pc_products.shipping=cashback.category_name和wp_pc_products.id_merchant=cashback.mert,其中feed_product_名称为“%sony%”,feed_产品名称为“%xperia%”,feed_产品名称为“%xperia%”和feed_产品名称为就像id_merchantit的“%c3%”组一样,它对我来说工作得很好。以类似的方式,我想从一个商家那里得到一个产品。这个查询是按照位置的顺序查找匹配项,比如第一个词,然后第二个词,依此类推。现在我们将其修改为随机匹配,这是唯一的区别。忘记上面我编辑的查询中的distinctm.image,然后建议我最好的一个。我也尝试了以上两个问题,你建议我认为第二个是最好的,这不是我预期的结果。我在wp_pc_product表中有id_merchant列,它重复了merchant的名称,在wp_pc_product_merchant表中有slug列,其中merchant name出现,这是我在这两个表中唯一的关系。我希望每个商户都有一个结果。为什么“-1”可以解释一下吗?
select distinct(m.image),p.feed_product_name,p.feed_product_image,p.price,p.deeplink from wp_pc_products p JOIN wp_pc_products_merchants m ON m.slug=p.id_merchant where (p.feed_product_name like'%sony%' or p.feed_product_name like'%xperia%' or p.feed_product_name like'%c3%' ) and p.price BETWEEN "11829.3" and "21968.7" group by p.id_merchant