Где оговорка о беде в сохраненном MySQL Query - PullRequest
1 голос
/ 25 января 2010

Я хотел бы выполнить запрос MySQL, содержащий предложение where («запрос результата»), которое хранится в столбце в базе данных. Этот столбец, содержащий запрос, является результатом другого запроса («оригинальный запрос»).

Уловы:

  • Предложение where результата запроса может содержать значение переменной (или два)
  • Я не знаю, каким будет результат запроса при выполнении исходного запроса, поэтому я не могу передать значение переменной

(Список запросов результатов, а также переменные в предложениях where будут определены мной, поэтому у меня будет список всех возможных переменных.)

По сути, мне нужно иметь возможность соотнести эту переменную с любым количеством других значений, например: user_id в базе данных.

original_query_table      | result_query_table
--------------------------------------------------------------
other_id result_query_id  | result_query_id  result_query
1        1                  1                "SELECT ... WHERE user_id = :id "   

Я знаю, как это сделать с двумя отдельными запросами, но вопрос в том, возможно ли это только с одним запросом?

1 Ответ

1 голос
/ 27 января 2010

Я бы сделал что-то вроде этого:

SELECT 'select * from table_a where col_a = ?' INTO @query, 1 into @param1 FROM dual;
PREPARE stmt FROM @query;
EXECUTE stmt USING @param1 ;

Итак, преобразовав это в ваши таблицы, я думаю, выглядело бы как

SELECT a.result_query INTO @query, b.result_query_id INTO @param1 FROM result_query_table a, original_query_table b where a.result_query_id = b.result_query_id;
PREPARE stmt FROM @query;
EXECUTE stmt USING @param1 ;

Вы будете знать, сколько параметров понадобится предложению where? Если это динамика, то все может стать немного сложнее.

...