WCM Forum

WCM Forum (http://www.wcm.at/forum/index.php)
-   Programmierung (http://www.wcm.at/forum/forumdisplay.php?f=17)
-   -   bedingtes einfügen bei mysql (http://www.wcm.at/forum/showthread.php?t=91520)

irrsinn 17.03.2003 20:58

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?

reichr 18.03.2003 11:24

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!

irrsinn 18.03.2003 11:29

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.

reichr 18.03.2003 11:38

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!

irrsinn 18.03.2003 11:51

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 :-)

Gonte 18.03.2003 12:23

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, ...)

käptn 18.03.2003 14:11

UNIQUE INDEX über Name (wie schon wer geschrieben hat...)

und dann INSERT IGNORE ...

HTH

~

irrsinn 18.03.2003 14:47

danke für die antworten!

bev 20.03.2003 09:20

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

irrsinn 20.03.2003 09:54

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