在Drupal 6、PHP 5.3和MySQL中工作,我正在构建一个大致如下的查询:
SELECT val from table [and some other tables joined in below]
where [a bunch of clauses, including getting all the tables joined up]
and ('foo' not in (select ...))
and (('bar' in (select...) and x = y)
or ('baz' in (select ...) and p = q))
这并不能很好地代表我正在努力做的事情,但希望这已经足够了。关键是,在查询的中间有一个嵌入的SELECT,它被使用了很多次。它总是一样的。它不是完全独立的——它依赖于从查询顶层的一个表中提取的值。
每次需要时都重复查询,我感到有点内疚/不干净,但我看不出有任何其他方法可以一次性计算值并根据需要重用它。由于它引用了顶级表中的值,所以我不能在查询之外计算一次,而只能通过MySQL变量或通过篡改查询字符串将值插入到查询中。或者,我想,无论如何。
对此我能做些什么吗?或者,从性能的角度来看,这可能不是问题:代码可能很糟糕,但parhaps-MySQL足够聪明,可以缓存值本身,避免反复执行查询?有什么建议吗?谢谢
您应该能够通过执行SELECT ... AS alias
,然后在其他查询中使用in alias
来对结果进行别名,因为SELECT
实际上只是一个表。