php - 同一张表的多个查询

标签 php mysql

这是根据发布参数动态生成的大查询的一部分......

有一个表user_params

id |  user_id | param_id | param_value 
--------------------------------------
1  | 5        |  2       | audi
--------------------------------------
2  | 5        |  3       | a4
--------------------------------------
3  | 5        |  4       | silver
--------------------------------------
4  | 7        |  2       | audi
--------------------------------------
5  | 7        |  3       | q3
--------------------------------------
6  | 8        |  2       | ford
--------------------------------------
7  | 8        |  3       | fiesta
--------------------------------------

我想提取所有 'user_id' where 'param_id' = 1 , 'param_value' = 'audi' , 'param_id' = 3 , 'param_value' = 'a4'

所以在这种情况下,我的结果应该包含 id 行 1、2、4、5、7。

考虑到这个表有超过 50K 个条目,最好的方法是什么?

这是一个 InnoDB 表。

+++ 现在我看到有一个 html 表单,其中包含这些表的多选字段。 “给我所有驾驶奥迪(a4 或 q3)或大众(帕萨特)的用户(user_id),它们是银色的”。

我正在测试您编写的解决方案。

最佳答案

您必须在同一个表上执行多个连接。

一种方法是这样的

SELECT
    t1.user_id
FROM
    thetable AS t1,
    thetable AS t2,
    thetable AS t3
WHERE
    t1.user_id = t2.user_id AND t2.user_id=t3.user_id AND
    t1.param_id = 1 AND t1.param_value = 'audi' AND
    t2.param_id = 3 AND t2.param_value = 'a4' AND
    t3.param_id = 4 AND t3.param_value = 'silver'

这等同于使用 JOIN 语句,但它只是给出了思路。

当然,查询必须扩展或减少,具体取决于您要检查的参数数量(示例中为 3 个)。

如果所有字段都已编制索引,则查询在 50K 条记录上运行得相当快。

关于php - 同一张表的多个查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29255091/

相关文章:

mysql - 如何使 sql 查询在 mysql 中的日期范围内每天返回一行?

java - Spring data JPA exists By Field在MySQL中不区分大小写,如何让它区分大小写

php - 在哪里可以找到结算协议(protocol) ID 然后在结帐时使用它

javascript - 为网站突出显示事件按钮

php - 警告:mysqli_stmt::bind_result():绑定(bind)变量的数量与准备好的语句中的字段数量不匹配错误

javascript - 无法检查从 View 返回的空数据

mysql - asp.net Identity 2.0的Extent用户表

mysql - 加快 IP 查找的双重/嵌套选择查询

mysql - CASE 上的选择语句

php - 缓存的 Ajax 调用