GimboMedlem sedan dec. 20001 630 inlägg
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
ingen? borde väl inte vara så svårt eller?
LarsGMedlem sedan dec. 200012 465 inlägg
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
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
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
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
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
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
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
ä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
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
CompusaMedlem sedan jan. 20022 952 inlägg
Gimbo skrev:
TACKAR D funka!
Härligt :)