2013-09-06 4 views
-1

데이터를 채우려는 테이블이 있습니다. 조회 테이블을 만들고 있는데 포함될 데이터를 준비하고 싶습니다. 조회 테이블에는 약 1400 개의 행이 있으므로 표준 다중 삽입이 올바르지 않게 보입니다. 또한 가능한 경우이 테이블을 PHP없이 채우고 싶습니다. 인스턴스 점수는 증가 된 목록 [0 .. 1400] 수 있어야하고, 백분위는 비어있을 수주문 번호를 테이블에 삽입하십시오.

기본적으로
CREATE TABLE score_percentile_lookup (
    id INT(11) NOT NULL AUTO_INCREMENT, 
    instance_score INT(11), 
    percentile DECIMAl(5, 2) 
    PRIMARY KEY(id) 
); 

가 시작이 내 테이블의 형태이다.

INSERT into score_percentile_lookup (instance_score) VALUES (0), (1), ... (1400); 

나는이 목록을 생성하기 위해 PHP를 사용할 수 있지만 그것없이 경우의 수 알고 싶어 : 기본적으로 다음과 같이 같은 것을 보일 것 삽입을 실행하기 위해 MySQL을 지원 구문을 않습니다. 도움을 준 사람에게 감사드립니다.

+1

이것은? 내가 CTE를 MySQL에서 사용할 수 없다는 것을 깨닫게되었고, 여기에 완벽 할 것이기 때문에 나는 슬퍼지게되었다. ... –

+1

[MySQL의 숫자 범위 생성하기] (http://stackoverflow.com/questions/186756/generating- a-range-of-numbers-in-mysql) –

+0

확실히 중복. 나는 다른 질문에 대해 이제 다 알고 있다니 다행이다. – usumoio

답변

1

MySQL에는 고유 한 구문이 없습니다.

당신은 그러나 사용할 수 있습니다

A A 저장된 프로그램 내에서 돌이 구조 : 다음

DELIMITER ;; 

CREATE PROCEDURE insert_ints(lbound INT, ubound INT, step INT UNSIGNED) BEGIN 
    PREPARE stmt FROM ' 
    INSERT INTO score_percentile_lookup (instance_score) VALUES (?) 
    '; 

    SET @acc := lbound; 
    WHILE @acc <= ubound DO 
    EXECUTE stmt USING @acc; 
    SET @acc := @acc + step; 
    END WHILE; 
    SET @acc := NULL; 

    DEALLOCATE PREPARE stmt; 
END;; 

DELIMITER ; 

그리고 것은 수행

CALL insert_ints(0,1400,1); 

또는, 당신은 이미 숫자의 이러한 범위를 포함하는 테이블이있는 경우 사용할 수 있음 INSERT ... SELECT :

INSERT INTO score_percentile_lookup (instance_score) 
    SELECT num FROM numbers WHERE num BETWEEN 0 AND 1400; 
1

related question :

INSERT INTO score_percentile_lookup 
(instance_score) 
SELECT TOP 1401 
(TWO_1.SeqValue + TWO_2.SeqValue + TWO_4.SeqValue + TWO_8.SeqValue + TWO_16.SeqValue + TWO_32.SeqValue + TWO_64.SeqValue + TWO_128.SeqValue + TWO_256.SeqValue + TWO_512.SeqValue + TWO_1024.SeqValue) SeqValue 
FROM 
(SELECT 0 SeqValue UNION ALL SELECT 1 SeqValue) TWO_1 
CROSS JOIN (SELECT 0 SeqValue UNION ALL SELECT 2 SeqValue) TWO_2 
CROSS JOIN (SELECT 0 SeqValue UNION ALL SELECT 4 SeqValue) TWO_4 
CROSS JOIN (SELECT 0 SeqValue UNION ALL SELECT 8 SeqValue) TWO_8 
CROSS JOIN (SELECT 0 SeqValue UNION ALL SELECT 16 SeqValue) TWO_16 
CROSS JOIN (SELECT 0 SeqValue UNION ALL SELECT 32 SeqValue) TWO_32 
CROSS JOIN (SELECT 0 SeqValue UNION ALL SELECT 64 SeqValue) TWO_64 
CROSS JOIN (SELECT 0 SeqValue UNION ALL SELECT 128 SeqValue) TWO_128 
CROSS JOIN (SELECT 0 SeqValue UNION ALL SELECT 256 SeqValue) TWO_256 
CROSS JOIN (SELECT 0 SeqValue UNION ALL SELECT 512 SeqValue) TWO_512 
CROSS JOIN (SELECT 0 SeqValue UNION ALL SELECT 1024 SeqValue) TWO_1024 
ORDER BY SeqValue 
관련 문제