mysql - 在同一个表上选择多个键值对

标签 mysql

我有一张 table

id keyword_id value   category_id asset_id
 1          2 abc.jpg        4424      479
 2          3 Jpeg           4424      479
 3          4 400*600        4424      479
 4          2 def.jpg        4424      603
 5          3 Jpeg           4424      603
 6          4 500*700        4424      603

我想根据多个对获取值,例如 (keyword id = 3 and value like '%Jpeg%') And (keyword id = 2 and value like '%abc% ').

这应该只返回一个 asset_id 479 的值,因为它满足两个条件。

我正在运行类似

的查询
SELECT DISTINCT asset_id FROM asset_keyword_table where category_id = 4424
AND (( keyword_id = 2 AND value LIKE '%abc%') AND ( keyword_id = 3 AND 
value LIKE '%Jpeg%'));

但是 EXPLAIN 这个查询返回不可能的 WHERE 子句。 让这个工作的方法是什么。 此查询由 BE 代码生成,因此像这样的 block 可以有很多 -

( keyword_id = 2 AND value LIKE '%abc%')

取决于用户输入。 AND 或 OR 分隔的 block 也由用户确定。不可能使用别名,因为 block 的数量没有限制。

有人能帮忙吗?

最佳答案

您需要过滤符合条件的总行数。

SELECT  Asset_ID
FROM    asset_keyword_table 
WHERE   category_id = 4424
        AND 
        (( keyword_id = 2 AND value LIKE '%abc%') 
        OR (keyword_id = 3 AND value LIKE '%Jpeg%'))
GROUP   BY Asset_ID
HAVING  COUNT(*) = 2 -- number of rows that matched the condition

这是一个 Demo .

关于mysql - 在同一个表上选择多个键值对,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48440551/

相关文章:

php - 分区不工作

mysql - MySQL显示rownum问题

php - mySQL UPDATE TEXT 与 INT 字段类型(速度性能)

php - 如何查找给定日期最近的第 25 天或第 10 天并将其添加到数据库中

java - 如何在 jsp 和 ajax 中为两个选择选项框动态获取和填充从 mysql 到 HTML 选择选项的值

php - 在 MySQL 数据库中存储日期和时间以便以后用 PHP 显示的最佳方法是什么?

MySQL:提取日期范围内出现次数在 2 到 10 之间的 ID

java - 使用 JDBC 和 MySQL 解决 "communications link failure"

java - 尝试运行 executeQuery/prepared statements() 时出错

php - 查询失败是否需要写ROLLBACK?