![]() |
bedingtes einfügen bei mysql
ich will mit php daten aus einem file auslesen und, sofern sie noch nicht in der datenbank gespeichert sind, sollen sie dort eingefügt werden.
konkret geht es um bibtex files. es sollen die autoren in einer tabelle gespeichert werden. dh es gibt viele daten, die doppelt und dreifach vorkommen. jeder autor soll aber nur einmal in die tabelle. gibts da eine möglichkeit, dass mir der sql server die arbeit abnimmt und herausfindet, ob der autor schon gespeichert ist? |
mysql
arbeitest du mit sql oder mysql?
naja, egal! möglichkeiten gibts sicher dafür! aber was anderes: du sagst der author darf net öfter als 1mal vorkommen!? wie meinst du das genau?? wenn du den author nur 1 mal hast kommt ja nur 1 datenreihe zurück... wenn du meinst der author soll nur 1 mal reingeschrieben werden (nicht öfter das man zB den author ein bischen anders schreibt oda so) dann würde ich ne 2. tabelle empfehlen wo nur die authoren drinnen stehen und die immer nur genau 1mal vorhanden sein dürfen! (kann man im feldtyp einstellen) dann holst du dir bei den anderen daten die authoren der 2. tabelle! muss ma halt dann mit verknüpfungen usw. aufpassen! weiß jetz nicht ob ich richtig liege, was du meinst! |
es schaut so aus: in dem file sind alle möglichen bibtex records. dh wenn 2 publikationen den gleichen autor haben, kommt der im file natürlich 2 mal vor. ich will aber nicht bei jedem autor, den ich aus dem file parse zuerst überprüfen, ob er schon in der datenbank ist, und wenn nein ihn einfügen. das ist mit sicherheit die langsamste möglichkeit.
|
mysql
so...
jetz weiß i genau was du meinst :D willst dies aber über php umsetzen so wie ichs jetz verstanden habe... hilft das nicht wenn du die authoren extra über die datenbank in nen drop down menü ausgibst und ein extra feld machst falls der author nicht eingetragen ist diesen dann da einträgst? dH ist er im drop down menü schon drinnen, dann nimm diesen wenn nicht tippe einen neuen ein !? mein problem bei dieser sache ist - wenn man den author einmal so und einmal so schreibt! groß und kleinschreibung ev. noch nicht so tragisch aber vielleicht passiert mal ein tippfehler oder so! |
du hast da noch immer was falsch verstanden. da gibts kein drop down menü. alles was passieren soll, ist die autoren von der datei in eine tabelle zu bringen. der user kann neue autoren nur hinzufügen, indem er ein neues bibtex file liefert.
das problem mit falsch geschriebenen autoren ist mir bewusst. damit muss ich vorerst leben. händisch möcht ichs nämlich bei diesen datenmengen nicht ausbessern. aber sofern die autoren im bibtex file richtig geschrieben sind, kann eh nix passieren :-) |
unter mysql könntest du das feld für den autorennamen als index festlegen und diesen index dann auf unique stellen. (was auch gross- und kleinschreibung abdecken würde). dann erhältst du eine fehlermeldung, falls der eintrag schon existiert. ("duplicate entry bla bla bla ...")
ansonsten wär dies ein klassischer fall für eine stored procedure. (falls die datenbak das unterstützt postgresql, mssql, ...) |
UNIQUE INDEX über Name (wie schon wer geschrieben hat...)
und dann INSERT IGNORE ... HTH ~ |
danke für die antworten!
|
hallo
ich hätte vielleicht noch eine idee, im php gibts ne funktion similar_text die berechnet dir die ähnlichkeit von zwei strings nun müsstest du dir einen prüfmechanismus basteln der zb bei einer übereinstimmung bis zu 85% den satz nicht in die db schreibt, so könntest du ev. auch gleich das problem mit anders geschriebenen namen abfangen. ist sicher nicht die schnellste art, aber wenn die tippfehler oder sonstiges zu viel werden sicher eine alternative lösung gruß bev |
hi! danke für den hinweis. so ähnlich war mein 1. ansatz auch. aber wenn ich mit php überprüfe, was schon alles in der datenbank steht, brauche ich entweder pro schreibvorgang vorher einen lesevorgang oder ich muss die ganzen autoren irgendwo als variable haben. wenn ichs nämlich so machen würde, bräuchte ich nicht die ähnlichkeit von 2 strings überprüfen, sondern ich könnte sie auf gleichheit testen.
|
Alle Zeitangaben in WEZ +2. Es ist jetzt 23:23 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
© 2009 FSL Verlag