mysql - 按 2 列的计数过滤 MySQL 查询

标签 mysql

我有这个问题:

select id, store_id, name from ads 
where name regexp '^.*(Massa+.*effect+)|(Glutamina+.*Black+.*Belt+).*$';

结果是:

 id | store_id | name
----|----------|-----------------
 94 |        9 | Massa effect
 96 |        9 | Glutamina black belt
131 |        1 | Glutamina black belt
143 |       55 | Massa effect

我需要一个查询来返回属于同一商店 (store_id) 的两种搜索产品(Massa effect 和 Glutamina black belt)。

在示例中,我希望结果是:

 id | store_id | name
----|----------|-----------------
 94 |        9 | Massa effect
 96 |        9 | Glutamina black belt

编辑

我在这张表上的一些数据示例:

 id | store_id | name
----|----------|-----------------
  2 |        4 | iPhone
 91 |        9 | Sweet sweat
 94 |        9 | Massa effect
 96 |        9 | Glutamina black belt
102 |        9 | BCCA 2500
131 |        1 | Glutamina black belt
143 |       55 | Massa effect
147 |       55 | Massa Effect
200 |       77 | Hey
202 |       78 | Topster
206 |       55 | Massa X

最佳答案

我不是 100% 确定这是否是您想要的,但您可以尝试这样的操作:

SELECT id, store_id, name 
FROM ads
WHERE name regexp '^.*(Massa+.*effect+)|(Glutamina+.*Black+.*Belt+).*$'
    AND EXISTS(
        SELECT null FROM ads as a WHERE 
        name regexp 
        '^.*(Massa+.*effect+)|(Glutamina+.*Black+.*Belt+).*$'
       AND a.id != ads.id
       AND a.store_id = ads.store_id
);

我很抱歉格式化。 一般的想法是使用“存在”来检查表中是否有另一个元素具有相似的属性,但不是行本身。如果要确保名称不相同,可以在 where 子句中添加另一个条件 a.name != ads.name

关于mysql - 按 2 列的计数过滤 MySQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46570415/

相关文章:

php - 如果数据相同则显示一次

mysql - 如何为PhpStorm配置MySQL数据源?

php - 如何复制MySQL字段?

php - 从mysql数据库中检索图像到android

mysql - 最后一个条目 SQL 的 UPDATE 字段

php - 从 mysql 表构建类别-子类别 html 列表

php - MySQL PHP 不兼容

mysql - 如何选择最新记录

mysql - Mysql中HAVING EVERY和HAVING ANY的另一种写法

java - 错误 DOMException : Failed to execute 'open' on 'XMLHttpRequest' : Invalid URL