如何重新查询查询?

时间:2011-03-27 11:06:35

标签: php mysql

考虑“Query1”,这非常耗时。 “Query1”不是静态的,它取决于$ language_id参数,这就是为什么我无法将其保存在服务器上。 我想用另一个查询语句查询这个“Query1”。我希望,这应该很快。我看到了两种方式

  1. $ result = mysql_query('SELECT * FROM raw_data_tbl WHERE((ID = $ language_id)AND(age> 13))');

    那么什么?在这里,我想取结果并用以下内容重新查询:

    $ result2 = mysql_query('SELECT * FROM $ result WHERE(Salary> 1000)');

  2. 是否有可能直接在服务器端创建类似“基于变量的”MYSQL查询,并以某种方式将变量$ language_id传递给它?第二个查询将查询该查询: - )

  3. ...谢谢

3 个答案:

答案 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 ...