【问题标题】:How to Requery a query?如何重新查询查询?
【发布时间】:2011-07-23 20:36:50
【问题描述】:

考虑“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 传递给它?第二个查询将查询该查询:-)

谢谢...

【问题讨论】:

  • 如果您愿意,可以使用嵌套 SQL 查询。

标签: php mysql


【解决方案1】:

不,没有你的第二个想法。


不过,对于第一个想法,我会使用一个查询:

select *
from raw_data
where id = $language_id
    and age > 13
    and Salary > 1000

如果您在表上设置了正确的索引,这个查询应该会很快。


在这里,考虑到该查询的 where 子句,我至少会在这三列上使用索引:

  • id
  • age
  • Salary

这应该会加快速度。


有关索引和查询优化的更多信息,请查看:

【讨论】:

  • 非常感谢您给了我正确的方向...我认为有类似查询“precooking”之类的东西...上面确实是一个简单的示例,我不会费心将查询分成两个步骤...
【解决方案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);

【讨论】:

    【解决方案3】:

    虽然最好的解决方案是将第二个查询中的条件添加到第一个查询中,但您可以使用temporary tables 来存储临时结果。但是如果你把它放在一个查询中会更好。

    你也可以使用subqueries,比如SELECT * FROM (SELECT * FROM table WHERE ...) WHERE ...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-07-13
      • 1970-01-01
      • 1970-01-01
      • 2017-05-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多