Работая в 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, либо перебирая строку запроса. Или, я так думаю, в любом случае.
Что я могу с этим поделать? Или, может быть, это не проблема с точки зрения производительности: код может быть неприятным, но, возможно, MySQL достаточно умен, чтобы кэшировать само значение и избегать выполнения запроса снова и снова? Любой совет? Спасибо!