insert date met repeat

Status
Niet open voor verdere reacties.

Frenske123

Terugkerende gebruiker
Lid geworden
2 jul 2007
Berichten
1.267
Hallo

Stel k heb een kolom genaamd Id, datum met waarde 2015-06-06 en als voorbeeld kolom test met waarde test1


Id | 1
Datum | 2015-06-06
Test | test1

Nou wil ik deze dupliceren , alles een week later met bijv. max. 2 weken, krijg in in de table:


Id | 1 |2|3
Datum | 2015-06-06 | 2015-06-013 | 2015-06-21
Test | test1 | test1 | test1



Ik doe dit nou verschillende queries met insert (next week, next week +1 enz )

Is er ook een mogelijkheid dit met een date interval te doen als een querie , dus bijv om de week met een max. van 4 weken
.
Hoop dat ik duidelijk ben.
 
Wat je precies bedoelt met een date interval als query is me niet helemaal duidelijk, maar als mogelijke oplossing voor je probleem zou je een stored procedure kunnen schrijven met als parameters het id van de kolom die je wilt dupliceren, het aantal weken dat per duplicatie moet worden toegevoegd en het aantal duplicaties dat je wenst te maken. Dan is het enkel een kwestie van het aanroepen van die stored procedure met de juiste parameters. Voor het dupliceren van de rij met 1 als id en alles een week later met een max van 2 weken doe je dan de aanroep duplicate(1, 1, 2) en voor het dupliceren van de rij met 2 als id en alles om de week met een max van 4 weken doe je dan de aanroep duplicate(2, 2, 4).

edit: typo
 
Bedankt voor je antwoord.

Heb je een (simpel) voorbeeld van een en ander?
 
Om een voorbeeld van zo'n stored procedure te kunnen geven moet ik eerst weten welke DBMS je gebruikt. Voor PL/SQL zou zo'n implementatie er als volgt uit kunnen zien (niet getest):

[cpp]
CREATE OR REPLACE PROCEDURE duplicate(targetId NUMBER, weeksToAdd NUMBER, count NUMBER)
IS
currentDate DATE;
message VARCHAR2(255);
BEGIN
/* het ophalen van de gegevens uit de tabel met het opgegeven id */
SELECT DATUM, TEST
INTO currentDate, message
FROM TableName WHERE ID = targetId;

/* het toevoegen van alle duplicaties */
FOR dupCount IN 1 .. count LOOP
INSERT INTO TableName (datum, test) VALUES (currentDate + (weeksToAdd * 7 * dupCount), message);
END LOOP;
END;
[/cpp]

Wel moet je overal waar nu TableName staat de naam van je tabel neerzetten.
 
Bedankt ,
werk met Mysql(i)..

PHP:
FOR dupCount IN 1 .. count LOOP
        INSERT INTO TableName (datum, test) VALUES (currentDate + (weeksToAdd * 7 * dupCount), message);
    END LOOP;

Bovenstaande begrijp ik niet zo goed.
(nog vrij basic , maar met behulp van forumleden ben ik wel eind in de goede richting)

En uiteraard zal ik het eens op mijn gemak uitproberen.
 
Dat is gewoon een for loop welke van 1 tot en met count (het aan gewenste duplicaties gaat). In PL/SQL kan je met datum + aantalDagen een aantal dagen bij een datum optellen, dus reken ik bij de insert into die je ziet het aantal weken dat per duplicatie moet worden toegevoegd om naar het aantal dagen waarmee dit overeenkomt.
 
Is het voorbeeld hierboven compleet? blijf meldingen krijgen als,
You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'PROCEDURE duplicate(targetId NUMBER, weeksToAdd NUMBER, count NUMBER) IS curr' at line 1

Ik zal het wel niet goed toepassen.
 
Ik heb
PHP:
 $SQL = "INSERT INTO data (title,datum)
    VALUES    
    ('$title','$datum')";    
for ($i=1; $i<4; $i++) {
   $SQL .= (",\r\n\t('$title','$datum' + INTERVAL " . ($i*4) . " WEEK)");

Dit werkt goed, wil ik echter een kolom toevoegen (comments) gaat het mis, de datum klopt niet meer en is hetzelfde

PHP:
 $SQL = "INSERT INTO data (title,datum,comments)
    VALUES    
    ('$title','$datum','$comments' )";    
for ($i=1; $i<4; $i++) {
   $SQL .= (",\r\n\t('$title','$datum','$comments' + INTERVAL " . ($i*4) . " WEEK)");

Iemand een idee wat hier mis gaat? :( of een andere manier...

Edit
deze is opgelost, de volgorde wat aangepast.
 
Laatst bewerkt:
Ik Kopieer nou met een interval , dag, maand enz.
Is er ook een manier om bijv. van een bestaande willekeurige datum in te voegen/kopie:
bijvoorbeeld:kopieer geselecteerde naar 2e maandag van de volgende maand, met de nadruk op 2e maandag enz.

Of zal ik toch eerst met PHP aan de slag moeten om de 2e maandag te berekenen.

PHP:
$datum =2015-06-06;
rij 
$SQL .= (",\r\n\t('$title','$datum', '$comments'  + INTERVAL " . ($i*4) . " WEEK)");
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.

Nieuwste berichten

Terug
Bovenaan Onderaan