Insert or update data in mysql using a perl script
am 04.03.2011 18:36:32 von francesca casalino--0016e6d99b9c3e7c07049dab9676
Content-Type: text/plain; charset=windows-1252
Content-Transfer-Encoding: quoted-printable
Hi perl and mysql experts,
I am lost again into a problem that I do not know how to approach, and was
wondering whether you could direct me to the right path once more, telling
me if I am using the correct approach or I am totally off-path=85 I can fin=
d
only some solutions in the help pages but I am still confused about my
particular case=85
The database on mysql has various tables where each one is related to the
other through foreign keys, and
-----Table_1-----------
LOCATION_ID (AUTO-INCREMENT) LOCATION
SITE NAME
1
1234 4
syd
2
1235 4
brux
3
1236 5 temp_1
-----Table_2-----------
ASSIGN_ID (AUTO-INCREMENT) LOCATION_ID (FOREIGN KEY)
ASSIGN
The data is in a file that contains information on the assignments (Table 2=
)
for certain locations (Table 1), but some are new locations and need to be
newly inserted into Table 1, while others already have an entry into Table =
1
and need to be entered into Table 2 with the LOCATION_ID that corresponds t=
o
them (either recognizing them with the same =93Table1.NAME=94 if there is o=
ne
(but some new entries do not have a NAME) or with the same LOCATION AND
SITE). For this reason in mysql I created a UNIQUE KEY(LOCATION,
SITE)).
Now, in the perl script I am looping through my data file and creating thes=
e
variables for the columns in Table 1 and Table 2:
my $site =3D shift(@fields);
my $location =3D shift(@fields);
my $name =3D shift(@fields);
my $assign =3D shift(@fields);
I was thinking of trying these steps:
*1.* Create a query to look whether there is already an entry in the
existing database (but can I do this by checking whether the combination of
$location AND $site (my unique key) are the same as this same combination i=
n
my new data?)
$query =3D "SELECT location_id FROM table_1 where location=3D\'$location\' =
&
site=3D\'$site\'";
Maybe I need to use fetchrow_array.
*2.* Loop through the results of this query, and
*3.* If there is already an entry, then use the location_id and name entere=
d
in Table 1 (and if the name is not entered already in the database, then
enter this name) --- In this step I do not need to do anything in table_1,
but I need to select this location_id (and name if there is one), maybe
using a =93selectrow_array=94?
*4.* If there is not an entry, then insert the new data into Table_1 using
the =93name=94 if there is one, and if there is no name entering the new da=
ta in
Table_1 using a temporary name such as =93temp_1=94.
I think this step would be something like this:
$dbh->do(q{INSERT INTO table_1 (location, site, name) VALUES (?=
,
?, ?)}, undef, $location, $site, $name);
# get the primary key value of the inserted record of Table 1:
my $location_id =3D $dbh->selectrow_array (qq (select
last_insert_id() ));
And if there is no name, then maybe do:
update location where location_id =3D last_insert location_name =3D "temp_$=
id"
*5.* Then enter the new data for Table2, using either the newly entered
location_id or the location_id that was fetched in step *3*=85
$dbh->do (qq (insert into table_2 (location_id, assign) values
(?,?) ), undef, $location_id, $assign);
I hope this wasn=92t too confusing...I think I am totally confused! If you
have any suggestions could you please advise?
Thank you very much again!
--0016e6d99b9c3e7c07049dab9676--