在MySQL查询结果

时间:2017-06-24 22:32:56

标签: mysql

我有一个看起来像这样的表(例子)

+----+----------+----------+---------------+
| id | objectId | filterId | filterValueId |
+----+----------+----------+---------------+
|  1 |       55 |      111 |          2345 |
|  2 |       55 |      113 |          2567 |
|  3 |       55 |      113 |          2568 |
|  4 |       58 |      111 |          2347 |
|  5 |       58 |      115 |          2499 |
+----+----------+----------+---------------+

现在,我查询了一些LEFT JOIN(主对象表,这个过滤表,元表和其他几个)。我正在创建前端过滤,我已经达到了一定程度,但是我遇到了一个问题。

当我在队列中有两个过滤器时(假设 filterId => filterValueId 111 => 2345和113 => 2567)。 使用查询

SELECT ojectId IN tableName
 WHERE (filterId = 111 AND filterValueId = 2345) 
   AND (filterId = 113 AND filterValeId = 2567)

我无法获取信息,objectId 55符合这两个标准。至少不是在单个查询中。我知道,这是有道理的,但有没有办法让MySQL给出这样的结果? (这个请求/程序是否有一些我可以用于谷歌搜索的技术名称?)

或者最好将此类过滤拆分为多个查询,然后将结果相交并得出每个结果中的结果?

很抱歉以错误的方式使用技术术语,希望你能理解我想说的话:)

非常感谢。

2 个答案:

答案 0 :(得分:0)

在谷歌搜索没有特殊名称。您刚刚使用AND编写了获取sql以仅获取一条记录而不是两条记录。您应该使用OR。 并将IN更正为FROM

SELECT ojectId 
FROM tableName 
WHERE 
    (filterId = 111 AND filterValueId = 2345) 
    OR (filterId = 113 AND filterValeId = 2567)
  

或者最好将此类过滤拆分为多个查询和   然后交叉结果,并获得每个中的结果   导致?

NO!让数据库只努力工作一次。立即给它所有过滤器。无需拆分查询。

答案 1 :(得分:0)

考虑以下内容......

DROP TABLE IF EXISTS my_table;

CREATE TABLE my_table
(id INT NOT NULL AUTO_INCREMENT PRIMARY KEY
,objectId INT NOT NULL
,filterId INT NOT NULL
,filterValueId INT NOT NULL
);

INSERT INTO my_table VALUES
(1,55,111,2345),
(2,55,113,2567),
(3,55,113,2568),
(4,58,111,2347),
(5,58,115,2499);

SELECT objectid 
  FROM my_table 
 WHERE (filterid,filtervalueid) IN ((111,2345),(113,2567)) 
 GROUP 
    BY objectid 
HAVING COUNT(id = 2);
+----------+
| objectid |
+----------+
|       55 |
+----------+