Пользователи Navicat - есть ли способ создать переменную в верхней части нового запроса и обработать ее на странице? - PullRequest
0 голосов
/ 10 марта 2011

Я, по сути, пытаюсь создать эквивалент связывания параметров pHp pdo без использования php вообще.

Я использую Navicat для своих SQL-запросов и сборки, и поэтому могу делать несколько более интересных вещей, чем просто phpmyadmin.

В частности, у меня есть один запрос, который принимает значение даты и применяет его (буквально) к 14, если, где и группирует по операторам. Я хотел бы создать переменную вверху страницы, скажем:

:date

затем в запросе примените переменную, скажем:

WHERE date_inserted > :date

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

edit - пример:

В php вы можете создать подготовленный SQL-запрос, используя pdo, как показано ниже:

$stmt = $db->prepare("SELECT * FROM tablename WHERE field1 = :field1 AND datefield <= :date1 AND datefield2 >= :date1 AND datefield3 > :date1");

$stmt->bindParam(':field1', $somevariable);
$stmt->bindParam(':date1', $somedate);
$stmt->execute();

Я хочу сделать то же самое только с sql (используя navicat)

Ответы [ 3 ]

2 голосов
/ 10 марта 2011

Изучив мой собственный вопрос, вы можете установить переменные в вызове sql с помощью:

SET @variablename = [значение]

http://dev.mysql.com/doc/refman/5.0/en/user-variables.html

1 голос
/ 10 марта 2011

Это еще один ответ, так как вы не хотите использовать join

SET @@session.var = 'some_value'; 
select * from table where field = @@session.var

Не проверял, но я прочитал отсюда

http://forums.mysql.com/read.php?61,127011,127796#msg-127796

Я думаю, что переменная будет сохраняться до тех пор, пока соединение не будет закрыто и воссоздано.

Редактировать: ОП нашел остальную часть ответа. Редактирование в соответствии с просьбой.

Вы можете установить переменные в вызове SQL, используя:

SET @variablename = [value]

http://dev.mysql.com/doc/refman/5.0/en/user-variables.html

0 голосов
/ 10 марта 2011

Можете ли вы предоставить весь запрос?Я думаю, что производная таблица может работать, если это оператор SELECT.

Простой пример - начать с этого

select * from table where field = 'somedate'

Измените его на

select table.* from (select 'somedate' q)q, table where field = q.q

Итак, q - это ваша производная таблица из одной строки и одного поля, а q.q - это ваше поле.

Я действительно не знаю ничего более полезного, не увидев больше выражения.

Кстати, я ничего не знаю о PHP, phpmyadmin, Navicat или хранимых процедурах.Только самоучка MySQL.

...