Php MySQL查询过滤结果

Php MySQL查询过滤结果,php,mysql,Php,Mysql,我有一个名为pt_products的表,其中包含以下字段: `id` int(6) unsigned NOT NULL, `ean` bigint(13) unsigned NOT NULL, `merchant` varchar(64) NOT NULL, `price` decimal(10,2)NOT NULL, PRIMARY KEY (`id`) 表中的条目示例: INSERT INTO `pt_products` (`id`, `ean`, `merchant`

我有一个名为pt_products的表,其中包含以下字段:

  `id` int(6) unsigned NOT NULL,
  `ean` bigint(13) unsigned NOT NULL,
  `merchant` varchar(64) NOT NULL,
  `price` decimal(10,2)NOT NULL,
  PRIMARY KEY (`id`)
表中的条目示例:

INSERT INTO `pt_products` (`id`, `ean`, `merchant`, `price`) VALUES
 ('1', '884116311874', 'Amazon', '10000.00'),
  ('2', '884116311874', 'BestBuy', '10999.00'),
('3','884116321378', 'CyberPuerta', '14789.00'),
 ('4', '884116311875', 'Amazon', '10999.00'),
  ('5', '884116311875', 'BestBuy', '10000.00');
我需要做的是:

-将表中具有相同ean的条目分组

-如果
merchant
字段中没有“Amazon”,则丢弃分组条目

-如果包含“Amazon”as merchant的
字段的
price
字段没有最低的
price
字段,则丢弃
merchant
字段上有“Amazon”的分组条目

-除“亚马逊”外,至少有一个不同的商户具有相同的“ean”

我实现了按ean对表中的条目进行分组,但这将显示按ean排序的所有条目:

SELECT ean, merchant, price FROM pt_products ORDER BY ean;
我想知道获得理想结果的最佳方法是什么。如果使用的apppiate查询,则使用php循环过滤查询结果

您可以使用上面给出的示例进行测试
谢谢

您可以按
ean
分组,并在having子句中设置条件:

SELECT ean
FROM pt_products
GROUP BY ean
HAVING MIN(price) = MIN(CASE WHEN merchant = 'Amazon' THEN price END)
   AND SUM(merchant <> 'Amazon') > 0
请参阅。
结果:


您可以按
ean
分组,并在having子句中设置条件:

SELECT ean
FROM pt_products
GROUP BY ean
HAVING MIN(price) = MIN(CASE WHEN merchant = 'Amazon' THEN price END)
   AND SUM(merchant <> 'Amazon') > 0
请参阅。
结果:


这是一个很好的解释。该查询的问题是,它还显示只有Amazon具有该ean的实体。理想的结果是显示“亚马逊”商户的最低价格,其中至少有一个不同的商户具有相同的“ean”。检查这个例子。不应显示条目“`”('94919'、'103439433708'、'Amazon'、'9999.99')``,因为只有Amazon具有该ean。您是否提到此条件:您的问题中至少有一个不同的商户具有相同的“ean”?抱歉:(看起来我以为我有,但我没有。我会编辑它。谢谢谢谢谢谢。如果在所有之前的筛选之后,我只想显示商家“Amazon”?要求是:-将表上具有相同ean的条目分组。-如果没有一个条目具有“Amazon”,则丢弃分组的条目在商户字段上。-如果包含“亚马逊”的价格字段中包含“亚马逊”,则丢弃商户字段上有“亚马逊”的分组条目因为商户没有最低价格字段。-除了“亚马逊”之外,至少有一个不同的商户具有相同的“ean”-在结果中,仅显示将亚马逊作为商品的条目。这是一个很好的方法。该查询的问题是,它还显示只有亚马逊具有该ean的实体。期望的结果是显示那些e“Amazon”商户的最低价格是指至少有一个不同商户具有相同的“ean”。请检查此示例。条目“``”('94919'、'103439433708'、'Amazon'、'9999.99')“``不应该显示,因为只有亚马逊有那个ean。你在问题中提到过这样一个条件吗:至少有一个不同的商户有相同的ean吗?对不起:(看起来我以为我有,但我没有。我会编辑它。谢谢谢谢。如果在所有之前的筛选之后,我只想显示商户“亚马逊”呢?要求是:-将表中具有相同ean的条目分组。-如果商户字段中没有“亚马逊”,则丢弃分组条目。-如果包含“亚马逊”的价格字段中的价格字段中有“亚马逊”,则丢弃商户字段中有“亚马逊”的分组条目因为商户没有最低价格字段。-除“亚马逊”外,至少有一个具有相同“ean”的不同商户-在结果中,仅显示将亚马逊作为商户的条目
>    id |          ean | merchant    |    price
> ----: | -----------: | :---------- | -------:
>     1 | 884116311874 | Amazon      | 10000.00
>     2 | 884116311874 | BestBuy     | 10999.00
> 87448 |  10343943704 | Amazon      |  3259.00
> 93885 |  10343943704 | Linio       |  3999.00
> 94913 |  10343943704 | XtremeTecPc |  3834.00