User since
2005-12-02
96
Artikel
BenutzerIn
Hi,
Ich hab ein Perl Programm das mir Files ausliest und diese Daten dann in einer mySQL datenbank speichert.
kann ich bevor das insert statement durchgefuehrt wird, irgendwie abfragen ob diejenigen Daten bereits drinnen stehen, gibt es da eine andere moeglichkeit ausser mit einem select statement, wenn ja welche, wenn nicht wie mach ich das genau.....
Dankeschoen im voraus...
mfg
User since
2003-08-04
14371
Artikel
ModeratorIn
Das wirst Du nicht anders machen können als mit einem weiteren
SELECT. Außer Du wählst einen geschickten Primary Key, weil dann das Insert einfach fehlschlägt.
Wenn Du immer noch mit Genom-Daten arbeitest, dann würde ich die CRC64-Zahl (wie bei SwissProt) als Primary Key benutzen, weil die für jede Sequenz unterschiedlich ist. Für die Zahl gibt es ein Modul in BioPerl oder Du schaust mal in
Bio::FASTASequence nach...
User since
2003-11-28
3645
Artikel
ModeratorIn
Du kannst Felder UNIQUE machen. Dann schlägt ein INSERT-Statement fehl, wenn die Daten schon existieren.
User since
2003-08-04
12208
Artikel
Admin1
evtl. willst du auch
REPLACE. aber du hast leider nicht geschrieben,
was passieren soll, wenn die daten schon vorhanden sind. schau also
in die doku von
REPLACE.
User since
2005-12-02
96
Artikel
BenutzerIn
hi,
@renee: ich wollte am Anfang die CRC64 Zahl als primary key verwenden...
ich verwende Jakarta Struts, Hibernate und mySQL um die Informationen abzurufen, und bioperl um blast results zu parsen und zu inserten....., jedoch hab ich es leider nicht geschafft mein Hibernate Mapping so hinzubekommen das er mir die CRC Zahl als primary key akzeptiert....so hab ich dann einfach einen auto_increment wert als primary key genommen....
@ptk: heisst das wenn ich einen Spaltennamen als unique bezeichne, dann wird vor jedem insert abgefragt ob dieser Wert schon in der Datenbank vorkommt, oder muss ich die ganze tabelle unique setzen, kann ich das im nachhinein auch noch machen....
User since
2005-12-02
96
Artikel
BenutzerIn
hi,
hab noch ein anderes problem, wie kann ich ueberpruefen, ob ein insert statement erfolgreich durchgefuehrt wurde, und wenn nicht soll das ganze programm angehalten werden.......
weiters hab ich zwei insert statements, die hintereinander ausgefuehrt werden, ich will erreichen, das, wenn das erste statement nicht ausgefuehrt wird, weil der Eintrag schon drinnen ist, das dann das zweite auch nicht durchgefuehrt wird
es sind nur zwei tabellen, die eine 1:n beziehung haben.....
mfg
User since
2003-11-28
3645
Artikel
ModeratorIn
Ob INSERT geklappt hat, siehst du am Rückgabewert von do() oder execute(). In $errstr erfährst du den genauen Grund.
User since
2005-12-02
96
Artikel
BenutzerIn
hi ptk,
ich hab kein do() und execute(), ich verwende das modul Net::MySQL
hab das jetzt folgendermassen gemacht:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
$mysql->query(qq{SELECT * FROM protein WHERE accession_code = '$accession_code'});
print $mysql->has_selected_record(), "\n";
if ($mysql->has_selected_record() == 1) {
$id = $mysql->query (qq{INSERT INTO protein (accession_code, name_of_protein, length_of_protein)
VALUES('$accession_code', '$name_of_protein', '$length_of_protein')});
print "return value insert protein: ", $id, "\n";
$id_pep = $mysql->query(qq{INSERT INTO peptide (startpos_in_proteinseq, endpos_in_proteinseq, peptide_seq, expect_val, length_of_peptideseq)
VALUES ('$startpos_in_proteinseq', '$endpos_in_proteinseq', '$peptide_seq', '$expect_val', '$length_of_peptideseq')});
print "return value insert peptide: ", $id_pep, "\n";
print "Affected row:", $mysql->get_affected_rows_length, "\n";
#
print $mysql->get_error_message if $mysql->is_error, "\n";
print "\n";
} else {
print "don't do anything, ENTRY !!!!!!!! is already in the database \n";
}
User since
2005-12-02
96
Artikel
BenutzerIn
verdammt, ok, so war das jetzt nicht gemeint....
der code laesst sich nicht vernuenftig formatieren.....
meine frage zu dem code...., wenn ich die abfrage mache ob der Eintrag schon drinnen ist, dann funktioniert es nicht.......egal wie ich abfrage, er sagt mir immer das was drinnen ist, obwohl nichts drinnen ist....
mfg
User since
2005-12-02
96
Artikel
BenutzerIn
ok, hab das jetzt mit unique geloest, funktioniert auch sehr gut, das einzige problem das ich noch habe ist, das er wenn er das erste insert statement nicht ausfuehrt auch das zweite nicht ausfuehren soll....nur weiss ich nicht wie ich das abfragen soll....
mfg