Надежный ROW_COUNT () после использования запроса REPLACE INTO в хранимой процедуре - PullRequest
0 голосов
/ 07 февраля 2011

Я хочу получить ровно N случайных строк из таблицы mySQL.Чтобы добиться этого, я использую хранимую процедуру с временной таблицей (код ниже): <pre> CREATE DEFINER=<code>db_one @ % PROCEDURE getRandomRecords (INnt, INT, IN section INT) BEGIN DROP TEMPORARY TABLE IF EXISTS randomRecords;CREATE TEMPORARY TABLE randomRecords (q_id INT, section_id INT, question_name BLOB, hint BLOB, question_type INT, content BLOB, chapter_id INT, УНИКАЛЬНЫЙ КЛЮЧ (q_id));loop_random: LOOP IF cnt <1 THEN LEAVE loop_random;END IF;ЗАМЕНИТЕ В randomRecords SELECT r1.q_id, r1.section_id, r1.question_name, r1.hint, r1.question_type, r1.content, r1.chapter_id ОТ ВОПРОСОВ КАК r1ОТ вопросов)) КАК q_id) КАК r2 ГДЕ r1.q_id> = r2.que_id AND r1.section_id = section AND r1.question_type = '1' GROUP BY r1.chapter_id ORDER BY r1.q_id ASC LIMIT 1;IF ROW_COUNT () = 2, ЗАДАН. Cnt = cnt;ELSE SET cnt = cnt - 1;END IF;END LOOP loop_random;ВЫБРАТЬ q_id, section_id, вопрос_имя, подсказка, вопрос_тип, контент, chapter_id ОТ ОТДЕЛКИ randomRecords ORDER BY chapter_id ASC, q_id ASC;END $$

Оператор 'if else' с помощью ROW_COUNT () после запроса замены отвечает за контроль того, был ли запрос вставлен во временную таблицу или заменен.если строка заменяется, счетчик (значение cnt) сохраняет свое значение, если он вставлен - значение cnt уменьшается.
Работает так, как должно быть в базе данных, работающей с mysql engine 5.1 - временная таблица содержит ровно N строк (переменная cnt в процедуре)в наборе результатов.При работе с базой данных в MySQL 5.5.8 этот оператор «если», кажется, игнорируется - я получаю случайное количество строк, меньше, чем определенное значение N.Я подозреваю, что ROW_COUNT () не возвращает правильное значение.Есть ли альтернатива для получения надежного значения ROW_COUNT () после использования запроса REPLACE INTO?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...