2009-11-27 3 views
3

В postgres есть встроенная функция generate_series(), которая может генерировать строки с числом.генерировать много строк с mysql

есть функция в mysql делает то же самое?

+0

Awesome :) Если вы нашли дублирующий вопрос, который даст вам ответ, я бы предложил закрыть этот. –

+0

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

ответ

2

AUTO_INCREMENT

Или, может быть, вы имеете в виду How do I make a row generator in mysql.

+0

, но auto_increment не может использоваться с оператором «select» – anru

+0

См. Ссылку. Я добавил ссылку на аналогичный вопрос. –

3

Если все остальное терпит неудачу, вы могли бы повторить функцию в MySQL как процедура.
Что-то подобное может работать

DELIMITER // 
DROP PROCEDURE IF EXISTS `generate_series`// 
CREATE PROCEDURE `generete_series`(p_start Int, p_end Int) 
BEGIN 
    /* We need a temporary table to hold the values until we can output them */ 
    CREATE TEMPORARY TABLE `temp_series`(val Int Not Null); 

    /* Add all the values in the range to the temp table. */ 
    set @insert_query = CONCAT('INSERT INTO `temp_series` VALUES (', p_start, ')'); 
    set @ind = p_start + 1; 
    while @ind <= p_end do 
     set @insert_query = CONCAT(@insert_query, ',(', @ind, ')'); 
     set @ind = @ind + 1; 
    end while; 

    prepare stmt FROM @insert_query; 
    execute stmt; 

    /* Select the values and echo them back. */ 
    SELECT * FROM `temp_series`; 

    /* Free resources. This isnt needed, technically, unless 
    * you plan on using the function multiple times per connection */ 
    DROP TABLE `temp_series`; 
END// 
DELIMITER ; 

Обратите внимание, что это на самом деле не очень эффективная процедура, так как она использует временную таблицу и подготовленный запрос. Не очень хорошо использовать очень часто.

Вы должны искать альтернативные методы. Скорее всего, лучший способ сделать то, что вы пытаетесь сделать, не прибегая к этому.