Hilfe bei SQL-Statement

ahykes

Erfahrenes Mitglied
Hallo Jungs.
Habe ein kleines Problem mit meinem SQL-Statement. Und zwar folgendes. In meiner Tabelle gibt es verschiedene Gerätenamen. Diese setzen sich immer so zusammen:

<Ordnungszahl><Gerätetyp><Laufende Nummer>

Beispiel:

5212001SPS010

----------------
Nun gibt es verschiedene Gerätetypen. Ich möchte nur die Ergebnisseangezeigt bekommen die im Gerätetyp "OIS" drin stehen haben. ;)
Habe schonmal angefangen, doch die Abfrage liefert mir trotzdem ALLE Ergebnisse der Tabelle. Schaut mal hier :

SELECT * from ipv.fix_kommunikationsparameter WHERE geraet_name = '<suche>' AND geraet_name LIKE 'OIS' OR ip_adresse = '<suche>' OR geraet_name LIKE '<suche>'

Die Abfrage soll folgendes bewirken: Zeige mir alle Geräte die so wie <suche> heißen und im namen OIS tragen oder so ähnlich oder wo die ip-adresse gleich <suche> ist oder so ähnlich.... :-)

Könnt Ihr mir helfen?
 
Hallo,

1. wenn du like verwendest, muss du mit dem Zeichen "%" arbeiten.
Da mysql den like aber nicht mehr voll unterstützt solltest du den REGEXP verwenden

2. in einer where Abfrage ist der AND immer stärker als der OR

3. geraet_name = '<suche>' AND geraet_name LIKE 'OIS'
Das macht keinen Sinn: entweder suche ich mit gleich oder mit like bzw. REGEXP,
aber nicht beide Bedingungen durch and verknüpft.

Beispiel mit REQEXP

"Select * from artikel where Bezeichnung REGEXP ".$_SESSION["suchen"]."'";
 
BLOEBAUM hat gesagt.:
1. ... Da mysql den like aber nicht mehr voll unterstützt solltest du den REGEXP verwenden

Hallo,
woher hast Du denn die Info, dass MySQL den LIKE-Operator nicht mehr voll unterstützen würde? Das wäre ja eine völlige Abkehr vom SQL-Standard, das kann ich nicht so recht nachvollziehen. REGEXP ist außerdem deutlich langsamer als LIKE...

Martin
 
Hallo Martin,

Du hast Recht,dass der LIKE zu SLQ-Ansi Standard gehört.
Bei MySQL scheint es jedoch kleine Unterschiede zu geben.
Ich habe bei meiner Problemlösung zum LIKE einen Verweis auf den REGEXP gefunden,
kann die Stelle aber leider nicht wiederfinden.
Auf der Seite
http://dev.mysql.com/doc/refman/4.1/en/string-comparison-functions.html
wird auf Probleme mit dem Like hingewiesen.

Auszug:

In MySQL, LIKE is allowed on numeric expressions. (This is an extension to the standard SQL LIKE.)

mysql> SELECT 10 LIKE '1%';
-> 1

Note: Because MySQL uses C escape syntax in strings (for example, ‘\n’ to represent a newline character), you must double any ‘\’ that you use in LIKE strings. For example, to search for ‘\n’, specify it as ‘\\n’. To search for ‘\’, specify it as ‘\\\\’; this is because the backslashes are stripped once by the parser and again when the pattern match is made, leaving a single backslash to be matched against.

Harald
 
Zurück