Laden...

[erledigt] MYSQL Such-Statements mit Wildmasks in Zellen

Erstellt von Crone vor 12 Jahren Letzter Beitrag vor 12 Jahren 3.817 Views
C
Crone Themenstarter:in
168 Beiträge seit 2010
vor 12 Jahren
[erledigt] MYSQL Such-Statements mit Wildmasks in Zellen

verwendetes Datenbanksystem: <bitte immer angeben>MYSQL

Hallo zusammen,

Ich habe mir ein Programm gemacht welches Emails per SMTP versendet. Dies funktioniert auch soweit gut nun möchte ich aber ein anhang versenden was ansich auch kein problem ist jedoch habe ich als Ausgangspunkt nur die Datei.

z.b. test_12.12.12.xls
oder
test.xls

in der Datenbank soll nun nachgeschaut werden welche Person diese Dateien erhalten soll.

In der Datenbank sind die Dateien wie folgt eingetragen

test*.xls

eine oder mehrere Dateien haben einen zeitstempel andere wiederrum nicht. Somit sehe ich keine möglichkeit mit LIKE den Datensatz herraus zu filtern. Kennt wer zufällig eine möglichkeit?

Das abtrennen des Zeistempels ist eigentlich auch nicht möglich da ich ja nicht wissen kann ob die Datei einen hat oder es einfach nur irgendwelche Zahlen Reihenfolgen sind.

Für ein paar gute ideen oder ein SQL statemante wäre ich sehr dankbar.

Zusammengefasst:

Ich möchte mit "test_1234.xls" in der Datenbank "test*.xls" oder "test.xls" suchen.

Mit freundliche Grüßen

Crone

Real programmers don't comment their code - it was hard to write, it should be hard to understand.

33 Beiträge seit 2009
vor 12 Jahren

Wieso soll LIKE nicht funktionieren?

SELECT * FROM [Tabelle] WHERE FileName LIKE 'test%.xls'
C
Crone Themenstarter:in
168 Beiträge seit 2010
vor 12 Jahren

ganz einfach weil ich ich mit

SELECT * FROM [Tabelle] WHERE FileName LIKE 'test_12.12.12.xls'

suche. Ich habe test_12.12.12.xls als Ausgangspunkt und suche test*.xls in der Datenbank.

Real programmers don't comment their code - it was hard to write, it should be hard to understand.

16.807 Beiträge seit 2008
vor 12 Jahren

Du musst quasi jeden Eintrag in der Datenbank mit Deinem Such-Eintrag vergleichen. Bedenke aber, dass es % heißt, und nicht *.

L
416 Beiträge seit 2008
vor 12 Jahren

In TSQL ginge

SELECT * FROM [Tabelle] WHERE 'test_12.12.12.xls' LIKE FILENAME
C
Crone Themenstarter:in
168 Beiträge seit 2010
vor 12 Jahren

Du musst quasi jeden Eintrag in der Datenbank mit Deinem Such-Eintrag vergleichen. Bedenke aber, dass es % heißt, und nicht *.

Stern ist richtig weil das ja nicht das statement ist sondern der eintrag in der Datenbank.Sprich ob da sternchen ist oder ?!() oder sonst was ist eigentlich egal. Die stehen deshalb darin weil die suche vorher andersrum verlief dafür muss ich aber alle datensätze durchgehen und das sternchen ist die Wildcard in C#, jedoch will ich nicht mehr alle Datensätze durch gehen sondern mit dem Dateiname den Datensatz suchen.

als beispiel ich suche mit einen ganzen text das wort test in test und test2

so ungefähr kann man sich das vorstellen genau umgekehrt wie es jeder normale Mensch eigentlich machen würde ;D

Real programmers don't comment their code - it was hard to write, it should be hard to understand.

C
Crone Themenstarter:in
168 Beiträge seit 2010
vor 12 Jahren

In TSQL ginge

SELECT * FROM [Tabelle] WHERE 'test_12.12.12.xls' LIKE FILENAME  

Mit MYSQL kommt es bei der abfrage zu keinen fehler liefert jedoch alle Datensätze zurück.

Real programmers don't comment their code - it was hard to write, it should be hard to understand.

33 Beiträge seit 2009
vor 12 Jahren

Poste mal bitte deine Tabelle mit ein paar Beispieldaten. Ich peil leider nicht ganz was du hier versuchst 😉

C
Crone Themenstarter:in
168 Beiträge seit 2010
vor 12 Jahren

Poste mal bitte deine Tabelle mit ein paar Beispieldaten. Ich peil leider nicht ganz was du hier versuchst 😉

ja wiederspricht auch jeder logik was ich vor habe 😄

Tabelle mails
Spalten Email,text,subject,datei

in der Spalte datei steht z.b. folgendens

testdatei*.xls
test1234.xls
1337.xls
testdatei1*.csv
test12341.csv
13371.csv

Das sind so ziemlich alle möglichkeit die es gibt in der Datenbank

ich hab nun z.b. folgenden dateiname mit mein programm auf den PC entdeckt
testdatei_12.12.12.xls
oder
testdatei 12.12.12.xls

anhand diesen dateinahmen möchte ich jetzt den richtigen Datensatz in der SQL datenbank suchen. Sprich mit dem längeren wort such ich das kürzere nicht wie normalerweise mit dem kürzeren das längere.

Jedoch soll das ganze ohne Splitten des Dateinamen passieren. 😉

wiederspricht jeder logik glaube ich XD

Real programmers don't comment their code - it was hard to write, it should be hard to understand.

T
210 Beiträge seit 2006
vor 12 Jahren

Kannst Du Dir mit Java eine Stored Procedure schreiben, die Du für den "Vergleich" verwenden kannst? (Siehe MySQL/JVM)

Gruß
Tony

L
416 Beiträge seit 2008
vor 12 Jahren

Mit MYSQL kommt es bei der abfrage zu keinen fehler liefert jedoch alle Datensätze zurück.

Liegt wahrscheinlich daran das in MySQL auch % das Wildcardzeichen ist. Teste es doch einfach mal indem du es händisch bei einem Eintrag änderst. Kannst später ja dann automatisch überall * durch % ersetzen.

33 Beiträge seit 2009
vor 12 Jahren

ich hab nun z.b. folgenden dateiname mit mein programm auf den PC entdeckt
testdatei_12.12.12.xls
oder
testdatei 12.12.12.xls

anhand diesen dateinahmen möchte ich jetzt den richtigen Datensatz in der SQL datenbank suchen.

Und welchen der Beispieldatensätze die du gepostet hast müsste deine Abfrage dann zurückliefern? Ich sehe keinen der passt.

Sprich mit dem längeren wort such ich das kürzere nicht wie normalerweise mit dem kürzeren das längere.

Jedoch soll das ganze ohne Splitten des Dateinamen passieren. 😉

Welches ist das längere und welches das kürzere Wort? Und was genau meinst du mit splitten des Dateinamens?

S
269 Beiträge seit 2010
vor 12 Jahren

ich sehe Einen der passt, nämlich den Ersten
testdatei*.xls

in der Datenbank stehen, soweit ich das nun mitbekommen habe, die Dateinamen mit dem Wildcard

C
Crone Themenstarter:in
168 Beiträge seit 2010
vor 12 Jahren

ich habe test_12.12.12.xls

und will damit in der Datenbank test*.xls finden

Das abändern also Spliten des string "test_12.12.12.xls" ist nich vorgesehen da sich die strings (dateinamen) immer komplett unterscheiden!

gefunden wird kein eintrag aber ich werden mal die * in der Datenbank durch % ersetzen auch wenn dies nicht vorgesehen ist aber ich bezweifel das es geht.

Nur noch zur Erinnerung ich will nicht alle Datensätze einzelent durch gehen und vergleich .... falls jemand auf die idee kommen sollte 😄.

Real programmers don't comment their code - it was hard to write, it should be hard to understand.

16.807 Beiträge seit 2008
vor 12 Jahren

Nur noch zur Erinnerung ich will nicht alle Datensätze einzelent durch gehen und vergleich

Was Du willst und was Du musst sind in diesem Fall zwei Paar Stiefel.

Du willst - im Gegensatz zum definierten Verhalten - die Wildmask in den Zellen nutzen, statt in der Abfrage. Ohne es getestet zu haben - und ohne mysql näher zu kennen - bezweifel ich stark, dass Dein Vorhaben ohne Iteration über alle Einträge funktioniert. (Aber ich bin gespannt, ob's eine andere Lösung gibt.

L
416 Beiträge seit 2008
vor 12 Jahren

im Gegensatz zum definierten Verhalten

Naja in TSQL gehts ja auch von daher würde es mich eher wundern wenn es in MySQL nicht geht. Er sollte es halt mal testen ... geht ja eigentlich schnell.

C
Crone Themenstarter:in
168 Beiträge seit 2010
vor 12 Jahren

Wie gesagt ich habs getestet nur leider liefert es alle einträge zurück 😄

@Abt ich hab keine ahnung wie du drauf kommst das ich von MySQL keine ahnung hab... aber ich nutze MySql ständig und in vielen meiner Programm bis jetzt hat auch alles funktioniert und ich glaub ne Datenbank mit mehreren tausend tabellen und das ich auf der Arbeit nur mit Navision arbeite sagt glaube ich alles über meine kenntnisse. Falls du Navision nicht kennst es ist eigentlich nur Auf Datenbanke ausgericht mit C sided Programmier sprache.

Das problem sind weniger die Kenntniss sondern das problem ist das, dass was ich will gegen jeder logik verstößt und eigentlich kein sinn ergibt aber Performence sparrt, was bei vielen abfragen extrem nützlich ist. Und ich bin mir eigentlich schon fast sicher das es nicht möglich ist das umzusetzen was ich möchte ohne, dabei den String vorher zu bearbeiten.

Aber ich denke immer wieder an Signatur gfoidl.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"
xD

Also ohne die Datenbank zu bearbeiten, den dateinamen in C sharp zu manipulieren oder jeden eintrag einzelt durch zu gehen seh ich zu mindestens keine möglichkeit. Und wie bereits gesagt die Wildcards in den Datenbank einträgen (*) sind nur da weil der such vorgang vorher anders herum lief! 😄

Real programmers don't comment their code - it was hard to write, it should be hard to understand.

L
416 Beiträge seit 2008
vor 12 Jahren

Wie gesagt ich habs getestet nur leider liefert es alle einträge zurück 😄

Du hast also in der DB test*.xls mit test%.xls ersetzt und dann mit

SELECT * FROM [Tabelle] WHERE 'test_12.12.12.xls' LIKE FILENAME

getestet?
Warum sollten das bitte alle Einträge liefern? Ich werd das Gefühl nicht los das da was durcheinander gekommen ist ... aber hab jetzt keinen mySQL Server hier.

C
Crone Themenstarter:in
168 Beiträge seit 2010
vor 12 Jahren

aso sorry das hab ich noch nicht getestet die * durch % zu ersetzen soll eigentlich auch nich aber ich kanns ja einfachmal machen 😄

Real programmers don't comment their code - it was hard to write, it should be hard to understand.

L
416 Beiträge seit 2008
vor 12 Jahren

Liegt wahrscheinlich daran das in MySQL auch % das Wildcardzeichen ist.

Ja wozu fragst du denn überhaupt hier wenn du die Ratschläge die dir gegeben werden einfach ignorierst?

C
Crone Themenstarter:in
168 Beiträge seit 2010
vor 12 Jahren

war keine absicht 😃 habs einfach nur überlesen 😄

Wenn ich durch % ersetze funktionierts super Danke schonmal dafür 😃

Naja ich glaube das ich doch alle einträge mit * durch % ersetzen darf, was anderes ist denke ich nicht möglich 😄

Hinweis von Abt vor 12 Jahren

Bitte keine Full-Quotes mehr. Hab alle entfernt...

Real programmers don't comment their code - it was hard to write, it should be hard to understand.

16.807 Beiträge seit 2008
vor 12 Jahren

Ich hatte nie behauptet Du hast keine Ahnung. Weiß nicht woher Du diese Aussage beziehst.

Des weiteren wurde Dir das mit % und * bereits in den Antworten 1 und 3 erklärt. Aber Dein Problem ist ja nun gelöst...

C
Crone Themenstarter:in
168 Beiträge seit 2010
vor 12 Jahren

Aber Dein Problem ist ja nun gelöst...

Grundsätzlich ja außer es weiß jemand ne möglichkeit dies zu bewerkstelligen ohne die * durch % zu ersezten. Aber ich glaube leider nicht dran das es dafür eine komfortable lösung gibt 😃. Man kann nicht alles haben 😃

Danke für euere hilfe.

Real programmers don't comment their code - it was hard to write, it should be hard to understand.

L
416 Beiträge seit 2008
vor 12 Jahren

Ich vermute mal diese Einträge werden nicht von Hand in die DB eingetragen sondern irgendwie per Software. Hier könntest du beim Speichern die * durch % ersetzen. Wenn es statische Einträge sind musst du es ja nur einmalig von Hand austauschen.

16.807 Beiträge seit 2008
vor 12 Jahren

Zur Not gibt's immer noch REPLACE(FILENAME, '*', '%') aber das sind jetzt wirklich Grundlagen...... :rtfm: