考虑“Query1”,这非常耗时。 “Query1”不是静态的,它取决于$ language_id参数,这就是为什么我无法将其保存在服务器上。 我想用另一个查询语句查询这个“Query1”。我希望,这应该很快。我看到了两种方式
$ result = mysql_query('SELECT * FROM raw_data_tbl WHERE((ID = $ language_id)AND(age> 13))');
那么什么?在这里,我想取结果并用以下内容重新查询:$ result2 = mysql_query('SELECT * FROM $ result WHERE(Salary> 1000)');
是否有可能直接在服务器端创建类似“基于变量的”MYSQL查询,并以某种方式将变量$ language_id传递给它?第二个查询将查询该查询: - )
...谢谢
答案 0 :(得分:3)
不,没有你的第二个想法。
但是,对于第一个想法,我会使用一个查询:
select *
from raw_data
where id = $language_id
and age > 13
and Salary > 1000
如果您在表上有设置正确的索引,则此查询应该非常快。
在这里,考虑到该查询的where子句,我至少会在这三列上使用索引:
id
age
Salary
这应该可以加快速度。
有关索引和查询优化的更多信息,请查看:
答案 1 :(得分:2)
通过使用子查询,您可以利用MySQL的缓存功能。
SELECT * FROM raw_data_tbl WHERE (ID='eng') AND (age>13);
......之后:
SELECT * FROM (SELECT * FROM raw_data_tbl WHERE (ID='eng') AND (age>13)) WHERE salary > 1000;
但这只在一些非常罕见的情况下才有用。
使用正确的索引,您的查询将运行得足够快,而不需要欺骗。在你的情况下:
CREATE INDEX filter1 ON raw_data_tbl (ID, age, salary);
答案 2 :(得分:0)
虽然最好的解决方案是将第二个查询中的条件添加到第一个查询中,但您可以使用temporary tables来存储临时结果。但如果你把它放在一个查询中,它仍然会更好。
您还可以使用subqueries,例如SELECT * FROM (SELECT * FROM table WHERE ...) WHERE ...
。