动态生成MySQL多个where子句

标签 mysql sql where-clause

因此用户可以选择他想要过滤列表的类别

当只有一项被选中时一切正常:

        SELECT SQL_CALC_FOUND_ROWS a.id, a.PAnr, b.family, b.articlenr, b.ratio, a.oiltype, a.oiltemp
        FROM testdata_test a, testdata_gear b
        WHERE a.id = b.test_id  AND b.family = 'R660' 
        ORDER BY a.PAnr desc
        LIMIT 0, 10

但是当用户添加更多时:

        SELECT SQL_CALC_FOUND_ROWS a.id, a.PAnr, b.family, b.articlenr, b.ratio, a.oiltype, a.oiltemp
        FROM testdata_test a, testdata_gear b
        WHERE a.id = b.test_id  AND b.family = 'R540' OR  b.family = 'R660' 
        ORDER BY a.PAnr desc
        LIMIT 0, 10

当没有 AND 部分的表格大约有 4000 次时,我得到大约 400 万次点击。如果用户选择另一个,则大约有 800 万次点击。 我错过了什么?

最佳答案

将您的查询更改为此,您的查询将不会按预期运行 OR 语句,

SELECT SQL_CALC_FOUND_ROWS a.id, a.PAnr, b.family, b.articlenr, 
        b.ratio, a.oiltype, a.oiltemp
        FROM testdata_test a, testdata_gear b
        WHERE a.id = b.test_id  AND (b.family = 'R540' OR  b.family = 'R660')
        ORDER BY a.PAnr desc
        LIMIT 0, 10

或者

SELECT SQL_CALC_FOUND_ROWS a.id, a.PAnr, b.family, b.articlenr, 
        b.ratio, a.oiltype, a.oiltemp
        FROM testdata_test a, testdata_gear b
        WHERE a.id = b.test_id  AND b.family IN ('R540','R660')
        ORDER BY a.PAnr desc
        LIMIT 0, 10

关于动态生成MySQL多个where子句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31187090/

相关文章:

MySQL : incrementing text id in DB

php - 显示每个国家和城市的联系人

mysql - 如何添加一个带整数的空字段?

PHP/SQL - 如何过滤掉与另一个表的数据冲突的记录?

swift - 如何在 where 子句中使用协议(protocol)扩展

php - MySQL WHERE 结果基于先前的 WHERE 子句

for-loop - 我可以在 swift 的 for 循环中使用 'where' 吗?

java - 使用 jdbc 驱动程序连接到 Cloud SQL 时出错

sqlcmd - 如何在没有空格的情况下绕过列长度限制?

sql - 每列在单独的行中