Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
[erledigt] MYSQL Such-Statements mit Wildmasks in Zellen
Crone
myCSharp.de - Member



Dabei seit:
Beiträge: 168

Themenstarter:

[erledigt] MYSQL Such-Statements mit Wildmasks in Zellen

beantworten | zitieren | melden

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.
private Nachricht | Beiträge des Benutzers
epic_fail
myCSharp.de - Member

Avatar #avatar-2889.gif


Dabei seit:
Beiträge: 33

beantworten | zitieren | melden

Wieso soll LIKE nicht funktionieren?
SELECT * FROM [Tabelle] WHERE FileName LIKE 'test%.xls'
private Nachricht | Beiträge des Benutzers
Crone
myCSharp.de - Member



Dabei seit:
Beiträge: 168

Themenstarter:

beantworten | zitieren | melden

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.
Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von Crone am .
Real programmers don't comment their code - it was hard to write, it should be hard to understand.
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 15.752

beantworten | zitieren | melden

Du musst quasi jeden Eintrag in der Datenbank mit Deinem Such-Eintrag vergleichen. Bedenke aber, dass es % heißt, und nicht *.
private Nachricht | Beiträge des Benutzers
Lennart
myCSharp.de - Member



Dabei seit:
Beiträge: 416
Herkunft: Bawü

beantworten | zitieren | melden

In TSQL ginge
SELECT * FROM [Tabelle] WHERE 'test_12.12.12.xls' LIKE FILENAME
private Nachricht | Beiträge des Benutzers
Crone
myCSharp.de - Member



Dabei seit:
Beiträge: 168

Themenstarter:

beantworten | zitieren | melden

Zitat von Abt
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.
private Nachricht | Beiträge des Benutzers
Crone
myCSharp.de - Member



Dabei seit:
Beiträge: 168

Themenstarter:

beantworten | zitieren | melden

Zitat von Lennart
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.
private Nachricht | Beiträge des Benutzers
epic_fail
myCSharp.de - Member

Avatar #avatar-2889.gif


Dabei seit:
Beiträge: 33

beantworten | zitieren | melden

Poste mal bitte deine Tabelle mit ein paar Beispieldaten. Ich peil leider nicht ganz was du hier versuchst ;)
private Nachricht | Beiträge des Benutzers
Crone
myCSharp.de - Member



Dabei seit:
Beiträge: 168

Themenstarter:

beantworten | zitieren | melden

Zitat von epic_fail
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 :D

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.
private Nachricht | Beiträge des Benutzers
T-Man
myCSharp.de - Member



Dabei seit:
Beiträge: 210
Herkunft: Bremen

beantworten | zitieren | melden

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

Gruß
Tony
private Nachricht | Beiträge des Benutzers
Lennart
myCSharp.de - Member



Dabei seit:
Beiträge: 416
Herkunft: Bawü

beantworten | zitieren | melden

Zitat von Crone
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.
private Nachricht | Beiträge des Benutzers
epic_fail
myCSharp.de - Member

Avatar #avatar-2889.gif


Dabei seit:
Beiträge: 33

beantworten | zitieren | melden

Zitat von Crone
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.
Zitat von Crone
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?
private Nachricht | Beiträge des Benutzers
Somakia
myCSharp.de - Member



Dabei seit:
Beiträge: 269
Herkunft: Hessen

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
Crone
myCSharp.de - Member



Dabei seit:
Beiträge: 168

Themenstarter:

beantworten | zitieren | melden

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 :D.
Real programmers don't comment their code - it was hard to write, it should be hard to understand.
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 15.752

beantworten | zitieren | melden

Zitat von Crone
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.
private Nachricht | Beiträge des Benutzers
Lennart
myCSharp.de - Member



Dabei seit:
Beiträge: 416
Herkunft: Bawü

beantworten | zitieren | melden

Zitat von Abt
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.
private Nachricht | Beiträge des Benutzers
Crone
myCSharp.de - Member



Dabei seit:
Beiträge: 168

Themenstarter:

beantworten | zitieren | melden

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

@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! :D
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Crone am .
Real programmers don't comment their code - it was hard to write, it should be hard to understand.
private Nachricht | Beiträge des Benutzers
Lennart
myCSharp.de - Member



Dabei seit:
Beiträge: 416
Herkunft: Bawü

beantworten | zitieren | melden

Zitat von Crone
Wie gesagt ich habs getestet nur leider liefert es alle einträge zurück :D

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.
private Nachricht | Beiträge des Benutzers
Crone
myCSharp.de - Member



Dabei seit:
Beiträge: 168

Themenstarter:

beantworten | zitieren | melden

aso sorry das hab ich noch nicht getestet die * durch % zu ersetzen soll eigentlich auch nich aber ich kanns ja einfachmal machen :D
Real programmers don't comment their code - it was hard to write, it should be hard to understand.
private Nachricht | Beiträge des Benutzers
Lennart
myCSharp.de - Member



Dabei seit:
Beiträge: 416
Herkunft: Bawü

beantworten | zitieren | melden

Zitat von Lennart
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?
private Nachricht | Beiträge des Benutzers
Crone
myCSharp.de - Member



Dabei seit:
Beiträge: 168

Themenstarter:

beantworten | zitieren | melden

war keine absicht :) habs einfach nur überlesen :D

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 :D
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Crone am .
Real programmers don't comment their code - it was hard to write, it should be hard to understand.

Moderationshinweis von Abt (15.12.2011 - 10:34)

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

private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 15.752

beantworten | zitieren | melden

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...
private Nachricht | Beiträge des Benutzers
Crone
myCSharp.de - Member



Dabei seit:
Beiträge: 168

Themenstarter:

beantworten | zitieren | melden

Zitat von Abt
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.
private Nachricht | Beiträge des Benutzers
Lennart
myCSharp.de - Member



Dabei seit:
Beiträge: 416
Herkunft: Bawü

beantworten | zitieren | melden

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.
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 15.752

beantworten | zitieren | melden

Zur Not gibt's immer noch REPLACE(FILENAME, '*', '%') aber das sind jetzt wirklich Grundlagen...... :rtfm:
private Nachricht | Beiträge des Benutzers