2009-11-27 3 views
3

Dans postgres il y a une fonction intégrée generate_series() qui peut générer des lignes avec nombre.générer beaucoup de lignes avec mysql

y at-il une fonction dans mysql fait la même chose?

+0

Impressionnant :) Si vous avez trouvé une question en double qui vous donne la réponse, je suggère de fermer celui-ci. –

+0

comment puis-je fermer une question? où est le lien? Je pense que je n'ai probablement pas assez de réputaion pour le faire. – anru

Répondre

3

essayer celui-ci:

select @rownum:[email protected]+1 n, t.* from tbl t, (SELECT @rownum:=0) r order by somefield 
3

Si tout le reste échoue, vous pouvez répliquer la fonction dans MySQL comme une procédure.
Quelque chose comme cela pourrait fonctionner

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 ; 

Notez que ce n'est pas vraiment une procédure très efficace, car il utilise une table temporaire et requête préparée. Pas une bonne chose à utiliser très souvent.

Vous devriez chercher des méthodes alternatives. Il y a probablement une meilleure façon de faire ce que vous essayez de faire, sans avoir à recourir à cela.

Questions connexes