mySQL: Ich will nur das Schwein...
Stefan
- datenbank
0 Lude0 Philipp Hasenfratz0 Stefan
0 Andreas Korthaus
Guten Tag
Ich habe in einer Spalte einer mySQL Datenbank Zellen mit:
1///////////////////////////////////////////////////////////
//'Schweinchensup' 'Sparschwein' 'Hängebauchschweinshaxen'//
2///////////////////////////////////////////////////////////
//'Schwein' 'Schweinestall' 'Schweinefutter' 'Pouletbrüst'//
3///////////////////////////////////////////////////////////
//'Schweinestall' 'Schweinefutter' 'Schweinchen' 'Schwein'//
4///////////////////////////////////////////////////////////
//'Schweinestall' 'Schweinefutter' 'Schwein' 'Schweinerei'//
////////////////////////////////////////////////////////////
Ich möchte eine mySQL Abfrage starten, welche mir nur dijenigen Zeilen ausgibt,
in der das Wort 'Schwein' alleinstehend vorkommt, also:
Zeile 2, 3 und 4 ohne Zelle 1
Wie lautet die dazugehörige SQL Abfrage?
Ich habe die reglulären Ausdrücke studiert, bin bis jetzt auf keinen grünen Zweig gekommen.
MfG
Stefan
NB:
Kennt jemand den Unterschied zwischen REGEXP und RLIKE?
Hi,
unter Vorbehalt, weil ich nur den MS SQL Server kenne:
select * from table_xyz where (datafield like '%Schwein%')
Gruss,
Luddie
Guten Tag
Ich habe in einer Spalte einer mySQL Datenbank Zellen mit:
1///////////////////////////////////////////////////////////
//'Schweinchensup' 'Sparschwein' 'Hängebauchschweinshaxen'//
2///////////////////////////////////////////////////////////
//'Schwein' 'Schweinestall' 'Schweinefutter' 'Pouletbrüst'//
3///////////////////////////////////////////////////////////
//'Schweinestall' 'Schweinefutter' 'Schweinchen' 'Schwein'//
4///////////////////////////////////////////////////////////
//'Schweinestall' 'Schweinefutter' 'Schwein' 'Schweinerei'//
////////////////////////////////////////////////////////////Ich möchte eine mySQL Abfrage starten, welche mir nur dijenigen Zeilen ausgibt,
in der das Wort 'Schwein' alleinstehend vorkommt, also:
Zeile 2, 3 und 4 ohne Zelle 1Wie lautet die dazugehörige SQL Abfrage?
Ich habe die reglulären Ausdrücke studiert, bin bis jetzt auf keinen grünen Zweig gekommen.
MfG
StefanNB:
Kennt jemand den Unterschied zwischen REGEXP und RLIKE?
select * from table_xyz where (datafield like '%''Schwein''%')
ist Deiner Anforderung entsprechender. :-)
Gruss,
Luddie
Auf die Idee mit den Paltzhaltern % bin ich auch schon gekommen.
'% schwein %' führt zum richtigen Resultat, aber nur wenn das Wort 'Schwein' inmitten von anderen Worten steht und dadurch am Anfang und am Schluss ein Leerschlag aufweist. Steht das Wort 'Schwein' am Anfang oder am Ende in der Zelle, so wie u.a. in meinem Beispiel, funktioniert dein Vorschlag nicht.
Gruss
Stefan
select * from table_xyz where (datafield like '%''Schwein''%')
Hi,
die Where-Klausel darf auch erwietert wernden mit "and" oder "or"; z.B. where... and (datafiled like 'Schwein %')
Mal ein wenig in der Doku nachlesen.
Gruss,
Luddie
die Where-Klausel darf auch erwietert wernden mit "and" oder "or"; >>z.B. where... and (datafiled like 'Schwein %')
Ja, wenn man die Abfrage so gestaltet:
SELECT * FROM test
WHERE (spalte LIKE '% schwein %') OR (spalte LIKE 'schwein %')OR (spalte LIKE '% schwein')
führt sie zum gewnüschten Ergebnis.
Vielen Dank!
Ich frage mich nur, ob es nicht noch eine kürzere Möglicheit gibt.
MfG
STefan
Halihallo Stefan
die Where-Klausel darf auch erwietert wernden mit "and" oder "or"; >>z.B. where... and (datafiled like 'Schwein %')
Ja, wenn man die Abfrage so gestaltet:
SELECT * FROMtest
WHERE (spalte LIKE '% schwein %') OR (spalte LIKE 'schwein %')OR (spalte LIKE '% schwein')führt sie zum gewnüschten Ergebnis.
Ich frage mich nur, ob es nicht noch eine kürzere Möglicheit gibt.
Eigentlich sollte es auch mit %Schwein% funktionieren (ohne Spaces!), das % sollte eigentlich auch einen leeren String "matchen".
%Schwein%
sollte sowohl auf "Schwein", "Schweinshaxe", "Haxenschwein" passen. Ich nehme an, dass der "Fehler" durch die Leerstellen hervorgerufen wird.
Eine einfachere Methode IMO gibt's nicht.
Viele Grüsse
Philipp
Halihallo Stefan
Eigentlich sollte es auch mit %Schwein% funktionieren (ohne Spaces!), das % sollte eigentlich auch einen leeren String "matchen".
%Schwein%
sollte sowohl auf "Schwein", "Schweinshaxe", "Haxenschwein" passen. Ich nehme an, dass der "Fehler" durch die Leerstellen hervorgerufen wird.
Eine einfachere Methode IMO gibt's nicht.
Sorry, als ich dein Ausgangsposting nochmals gelesen habe, habe ich festgestellt, dass ich etwas am Thema vorbeigezogen bin ;-(
Natürlich müssen die Spaces dort stehen. Eine einfachere Methode, wie sie von Lude vorgeschlagen wurde, gibt's IMO nicht.
Viele Grüsse
Philipp
Halihallo Stefan
Ich möchte eine mySQL Abfrage starten, welche mir nur dijenigen Zeilen ausgibt,
in der das Wort 'Schwein' alleinstehend vorkommt, also:
Zeile 2, 3 und 4 ohne Zelle 1Wie lautet die dazugehörige SQL Abfrage?
SELECT * FROM SchweineTabelle WHERE SchweineSpalte="Schwein";
Ich habe die reglulären Ausdrücke studiert, bin bis jetzt auf keinen grünen Zweig gekommen.
Dazu brauchst keine RegExpe, das verschwendet nur Performance.
Viele Grüsse
Philipp
Merci für deine Antwort:
SELECT * FROM SchweineTabelle WHERE SchweineSpalte="Schwein";
Doch leider gibt mir diese Abfrage nicht das gewünschte Ergebnis. Es würde nur gerade diese Zeilen ausgeben, welche in der Spalte "schweineSpalte" genau ein Wort, nähmlich 'schwein' beinhalten. Dies ist bei mir nicht der Fall.
Doch reguläre Ausdrücke?
MfG
Stefan
Hallo!
1///////////////////////////////////////////////////////////
//'Schweinchensup' 'Sparschwein' 'Hängebauchschweinshaxen'//
2///////////////////////////////////////////////////////////
//'Schwein' 'Schweinestall' 'Schweinefutter' 'Pouletbrüst'//
3///////////////////////////////////////////////////////////
//'Schweinestall' 'Schweinefutter' 'Schweinchen' 'Schwein'//
4///////////////////////////////////////////////////////////
//'Schweinestall' 'Schweinefutter' 'Schwein' 'Schweinerei'//
////////////////////////////////////////////////////////////Ich möchte eine mySQL Abfrage starten, welche mir nur dijenigen Zeilen ausgibt,
in der das Wort 'Schwein' alleinstehend vorkommt, also:
Zeile 2, 3 und 4 ohne Zelle 1Wie lautet die dazugehörige SQL Abfrage?
Ich habe die reglulären Ausdrücke studiert, bin bis jetzt auf keinen grünen Zweig gekommen.
Naja, ich weiß jetzt nicht wie kompatibel die regulären Ausdrücke in MySQL sind, aber \b sthe tnormalerweie für Wortgerenzen, also könnte der Ausdruck so heißen: /\bschwein\b/, was am Ende vermutlich noch performanter ist als 3 OR-verknüpfte WHERE Bedingungen mit Like.
Ein andere Weg wäre ein Volltext-Index, der genau das macht, der trifft nur ganze Wörter, sowas wie SELECT schweinespalte FROM schweinetabelle WHERE MATCH (schweinespalte) AGAINST ('schwein'). Allerdings mußt Du hierfür einen Fulltextindex über die Spalte "schweinespalte" definieren.
http://de.mysql.com/documentation/mysql/bychapter/manual.de_Reference.html#Fulltext_Search
Kennt jemand den Unterschied zwischen REGEXP und RLIKE?
Der "Unterschied" steht hier: http://de.mysql.com/documentation/mysql/bychapter/manual.de_Reference.html#IDX1185
Grüße
Andreas