0

この質問の解決策を見つけるのに苦労しています。PHPでこの質問の解決策を提案します。

test_repeatというテーブルがあります

id  start   repeater   length     final
 1   20       2           3         50
 2   10       50          4        500

私の質問は

SELECT T.id AS ID, T.start AS start, T.repeater AS repeater 
       T.length AS length, T.final AS final
FROM `test_repeater` T
RIGHT JOIN `test_repeater` T2 ON T.id = T2.id 
WHERE T.start>=10 and T2.start*T2.repeater<=300

私が得ている結果は

ID  start  repeater   length    final    
1   20       2          3        50       
2   10       5          12       500    

私が取得しようとしているのは、各開始値がリピーターで追加され、最終条件が適用されるまでその値が次のrawとして作成されるような結果です(以下を参照してください)。

私の夢の結果はこんな感じになります

   ID   start   repeater   length     final
   1     20       2           3         50
   1     22       2           3         50
   1     24       2           3         50
   1     ...      .           .         ...
   1     ...      .           .         ...
   1     50       2           3         50
   2     10       5           4         500
   2     15       5           4         500
   2     20       5           4         500
   2     25       5           4         500
   2     30       5           4         500
   2     35       5           4         500
   2     ...      .           .         ...
   2     ...      .           .         ...
   2     ...      .           .         ...
   2     500      5           4         500
4

2 に答える 2

1

わかった。それはもっと理にかなっています...

 DROP TABLE IF EXISTS test_repeat;

 CREATE TABLE test_repeat
 (id  INT NOT NULL AUTO_INCREMENT PRIMARY KEY
 ,start   INT NOT NULL
 ,repeater   INT NOT NULL
 ,length     INT NOT NULL
 ,final INT NOT NULL
 );

 INSERT INTO test_repeat VALUE
 (1,   20       ,2           ,3         ,50),
 ( 2   ,10       ,5          ,4        ,500);


 DROP TABLE IF EXISTS ints;

 CREATE TABLE ints(i INT NOT NULL PRIMARY KEY);

 INSERT INTO ints VALUES (0),(1),(2),(3),(4),(5),(6),(7),(8),(9);



 SELECT r.id
      , r.start+(r.repeater*(i2.i*10+i1.i)) start
      , repeater
      , length
      , final 
   FROM test_repeat r 
   JOIN ints i1
   JOIN ints i2
  WHERE r.start+(r.repeater*(i2.i*10+i1.i)) BETWEEN r.start AND r.final
  ORDER 
     BY id
      , start;
于 2013-02-01T13:53:22.800 に答える
0
    SELECT T.id AS ID, T.start*T.repeater AS mymultipliedstart, 
           T.length AS length, T.final AS final
    FROM `test_repeater` T
    RIGHT JOIN `test_repeater` T2 ON T.id = T2.id 

WHERE T.start>=10 and T2.start*T2.repeater<=300
于 2013-02-01T13:30:02.643 に答える