webForumDet fria alternativet

göra insert med loop

12 svar · 892 visningar · startad av Gimbo

GimboMedlem sedan dec. 20001 630 inlägg
#1

har typ 1000prudkter i en mySQL databas som jag måste uppdatera med attribut.
varje produkt kommer att petas in 3gånger, med olika värden på o_id och o_v_id
Det jag undrar är om man kan göra ett script som trycker in dessa tre rader per automatik fast stegar produktID, för jag har produkter med id från 1-1000

typ om man gör en insert:
insert (produktID+1, 6, 19,0.0000, +)
insert (produktID+1, 7, 20,0.0000, +)
insert (produktID+1, 8, 21,0.0000, +)

men vet inte hur jag ska göra för att scriptet skall loopa mellan 1-1000 och köra de där 3 inserten?, någon som kan hjälpa, det är phpMyADmin jag ska köra detta i.

nedan ser ni attributen för en produkt i tabellen för attributer.

  ID           produktID     o_id         o_v_id       o_v_p           prefix
  42           400             6             19            0.0000          + 
  43           400             7             20            0.0000          + 
  44           400             8             21            0.0000          + 

Tacksam för hjälp

GimboMedlem sedan dec. 20001 630 inlägg
#2

ingen? borde väl inte vara så svårt eller?

LarsGMedlem sedan dec. 200012 465 inlägg
#3
create procedure insertPid(
   p_attr1 <dataType>, 
   p_attr2 <dataType>,
   p_attr3 <dataType>) modifies sql data
 begin
      declare loops int default 1;
     while loops <= 1000 do
             insert into <tableName>(<columns>) values(loops,p_attr1);
             insert into <tableName>(<columns>) values(loops,p_attr2);
             insert into <tableName>(<columns>) values(loops,p_attr3);
             set loops = loops + 1;
     end while;
 end
call insertPid(<values>)
GimboMedlem sedan dec. 20001 630 inlägg
#4

kan jag göra detta i phpmyadmin sql fråga?
där du skriver <dataType> kan jag skriva in värdet på attributen där?

dvs att jag skippar den här delen

create procedure insertPid(
   p_attr1 <dataType>, 
   p_attr2 <dataType>,
   p_attr3 <dataType>) modifies sql data
 begin

kan det i mitt fall se ut så här må tro, då allt skall vara statiskt förrutom produktID't, dvs att jag skriver bara följande rad i sql- manager.

declare loops int default 1;
     while loops <= 1000 do
             insert into <tableName>(produktID, kolumn1, kolumn2) values(loops,6, 19);
             insert into <tableName>(produktID, kolumn1, kolumn2) values(loops,6, 19);
             insert into <tableName>(produktID, kolumn1, kolumn2) values(loops,6, 19);
             set loops = loops + 1;
     end while;
 end
CompusaMedlem sedan jan. 20022 952 inlägg
#5

Det som är inom <> är "place holders". Du får ersätta dessa med vad som stämmer överens med dina tabeller/kolumner/datatyper exempelvis:

create procedure insertPid(
   p_attr1 int, 
   p_attr2 int,
   p_attr3 float) modifies sql data
 begin
      declare loops int default 1;
     while loops <= 1000 do
             insert into EttTabellNamn(kolumnNamn1, kolumnNamn2) values(loops,p_attr1);
             insert into EttTabellNamn(kolumnNamn1, kolumnNamn2) values(loops,p_attr2);
             insert into EttTabellNamn(kolumnNamn1, kolumnNamn2) values(loops,p_attr3);
             set loops = loops + 1;
     end while;
 end
GimboMedlem sedan dec. 20001 630 inlägg
#6

ursäkta om jag e rtög, men vart nånstans ska jag trycka in värdena för attributen?

values(loops,p_attr1); p_attr1 måste ju ha ett värde vart skriver jag in d värdet?

CompusaMedlem sedan jan. 20022 952 inlägg
#7

loops behöver du inte bry dig om. De initiala värdena för p_attr1, p_attr2, p_attr3 skickar du med i funktionsanropet till denna sp "call insertPid(<values>)".

Tänker du anropa din stored procedure från program-kod eller från PHPMyAdmin (om det nu går)? Om det är från programkod, vilket språk/teknologi? PHP?

GimboMedlem sedan dec. 20001 630 inlägg
#8

det är ingen sp jag vill göra , utan det är ungefär 1000produkter som finns i en databas tabell som jag vill lägga attribut till, och då måste jag för varje produkt lägga till 3poster i tabellen attribut, så jag tänkte om det fanns något smidigt sätt att göra detta automatiskt istället för att jag förhand skall behöva gå in och lägga till de tre raderna för varje produkt. Tänkte att det borde va ganska enkelt då det är samma värden i de 3posterna som skall läggas i attribut tabellen förrutom produktID som skall stegras med ett.

CompusaMedlem sedan jan. 20022 952 inlägg
#9

Det är ju precis vad den lagrade proceduren gör! Lagrad procedur är det bästa för denna typ av operationer på databasen.

Om du nu förväntar dig hjälp så får du ta och ge lite information till de som försöker hjälpa dig!?!? Eller förväntar du dig att vi ska gissa oss fram???

Compusa skrev:

Tänker du anropa din stored procedure från program-kod eller från PHPMyAdmin (om det nu går)? Om det är från programkod, vilket språk/teknologi? PHP?

Snäll som jag är idag så visar jag ett exempel i PHP...

<?php
$con = mysql_connect("localhost","användarnamn","lösenord");

if (!$con)
{
    die('Could not connect: ' . mysql_error());
}

mysql_select_db("my_db", $con);

$value1 = 10;
$value2 = 20;
$value3 = 5.2

$i = 0;
while ($i < 1000)
{

    mysql_query("INSERT INTO SomeTable (kolumnNamn1, kolumnNamn2) VALUES ($i, $value1)");

    mysql_query("INSERT INTO SomeTable (kolumnNamn1, kolumnNamn2) VALUES ($i, $value2)");

    mysql_query("INSERT INTO SomeTable (kolumnNamn1, kolumnNamn2) VALUES ($i, $value3)");

    $i++;
}

mysql_close($con);
?>
GimboMedlem sedan dec. 20001 630 inlägg
#10

är väldigt tacksam för er hjälp, men jag skrev i den första posten:

men vet inte hur jag ska göra för att scriptet skall loopa mellan 1-1000 och köra de där 3 inserten?, någon som kan hjälpa, det är phpMyADmin jag ska köra detta i.

i phpMyAdmin finns det en flik som heter SQL där man kan köra sql kommandon, det är där jag tänkte köra scriptet. Alltså det är ingen store proc. som jag vill skapa utan jag undrar om det bara går att knappa in de raderna ni hjälper mig med i phpMyAdmin SQL cmd för att utföra denna operation? och om så vad är det för rader jag ska skriva under SQL fliken i phpMyadin.

Nu käns det som att jag är tydlig i a f.

än en gång tack för din/er hjälp

CompusaMedlem sedan jan. 20022 952 inlägg
#11

Du kan inte göra det du vill göra med bara sql, förutom om du gör allt manuellt dvs. Antingen en stored procedure eller en lösning liknande min ovan, är det som gäller. Ett av syftena med stored procedures är att lösa just den sortens problem som du har, dvs att kunna kombinera sql med programmering.

GimboMedlem sedan dec. 20001 630 inlägg
#12

TACKAR D funka!

CompusaMedlem sedan jan. 20022 952 inlägg
#13

Gimbo skrev:

TACKAR D funka!

Härligt :)

Genererad på 539 ms · cache AV · v20260730165559-full.f96bc7eb