2012-01-10 2 views
3

Это очень простой вопрос MySQL, но я не смог найти ответ. Предположим, что следующее тело хранимой процедуры;MySQL Сохраненные процедуры Возврат Выберите

DECLARE Existing INT DEFAULT 0; 
SELECT SQL_CALC_FOUND_ROWS name FROM users WHERE id = pid LIMIT 1; 
SELECT FOUND_ROWS() INTO Existing; 
Select Existing; 

Когда я запускаю его, он всегда возвращает первые результаты SELECT. Однако я ожидаю, что он вернет последние результаты (SELECT Existing). Это нормальное поведение? Если да, то как я могу его изменить, потому что сначала выберите только для проверки, а последний - то, что мне нужно.

(Реальная логика отличается от этого, я просто упростил его здесь)

ответ

3

Вы могли бы сделать что-то вроде этого, вместо:

SELECT COALESCE(id/id, 0) AS Existing 
    FROM users 
    WHERE id = pid 
    LIMIT 1; 

Если id найден, вы будете возвращать 1 (id/id = 1). Если id не найден, вы вернете 0 (id/id IS NULL и COALESCE вернет 0).

0

Вы можете создать таблицу переменных, заполнить ее, а затем выберите из него

CREATE PROCEDURE my_proc() BEGIN 

CREATE TEMPORARY TABLE TempTable (myid int, myfield varchar(100)); 
INSERT INTO TmpTable SELECT tblid, tblfield FROM Table1; 

SELECT * FROM TEMPORARY; 
+0

нормально, но как проверить количество элементов в таблице темпа? когда я выполняю выбор в каком-то месте, он возвращает его и игнорирует остальные –

+0

@paulsimmons нет, если вы выбираете переменные, которые я считаю –

1

Проблема заключается в MySQL «клиент», который вы используете для запуска хранимой процедуры. Хранимая процедура вернет результирующий набор всех запросов, но клиент должен ее поддерживать. Выполняете ли вы свои запросы в phpMyAdmin или другом подобном клиенте? Попробуйте вызвать хранимую процедуру с помощью клиента по умолчанию - командной строки, и вы увидите, что он возвращает результаты по всем запросам. Прочтите последний параграф on this page.

Теперь это было для некоторых указателей. Теперь перейдем к тому, как вы можете вернуть значения из процедуры. Вы можете сделать это, используя параметр OUT, который используется для передачи значения из процедуры обратно вызывающему. Пожалуйста, прочитайте больше на this page on the MySQL website - пример на этой странице объясняет это.

Надеюсь, это поможет!

+0

Я использую модуль mysql в узле, где я настроил его для возврата нескольких наборов результатов путем передачи * multipleStatements: true * в параметрах соединения. Для каждой операции в SP вы получите результат назад (не обязательно набор строк). –

0

только для отладки, если два выбора количества возврата SQL столбца равны, вы можете использовать союз:

выбрать 1, '100' союз выберите '3434', 2;

Смежные вопросы