Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

MySQL - Abfrage über 2 Attribute

Frage Entwicklung Datenbanken

Mitglied: Dani

Dani (Level 5) - Jetzt verbinden

10.04.2009, aktualisiert 13:31 Uhr, 6607 Aufrufe, 8 Kommentare

Hallo zusammen,
und seinen wunderschönen Tag zum Arbeiten.

Ich habe eine MySQL-Tabelle die wie folgt aufgebaut ist:
01.
CREATE TABLE IF NOT EXISTS `protection` ( 
02.
  `id` int(11) NOT NULL auto_increment, 
03.
  `tag` varchar(50) NOT NULL, 
04.
  `name` char(50) NOT NULL, 
05.
  `sid` varchar(50) NOT NULL, 
06.
  PRIMARY KEY  (`id`) 
07.
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
Nun habe ich ein Plugin von einer Software, die ein SQL-Statement absetzt und 2 Parameter mit auf den Weg gibt.

1. Parameter wird mit "WHERE sid=" abgefragt
2. Parameter soll mit dem Inhalt der Spalte "tag" verglichen werden. Und zwar dahingehend, dass überprüft werden soll ob das Wort in der Zelle am Anfang des Parameters auftaucht. Beispiel:

Zelle: test
Parameter: test_lauf
Ergebnis: Treffer, Rückgabe von "name".

Ich habe schon einige Abfragen erstellt, aber um frischen Wind reinzubringen poste ich diese mal nicht!
Habt ihr ne Idee?


Grüße,
Dani
Mitglied: maretz
10.04.2009 um 17:03 Uhr
Ich habe schon einige Ideen entwickelt - aber um das nicht langweilig werden zu lassen poste ich die mal nicht...

Wie wärs wenn du erstmal deine Überlegungen zeigst - und wir dann gucken ob man da was verbessern könnte?
Bitte warten ..
Mitglied: dog
10.04.2009 um 18:28 Uhr
Naja, da gibt es mehrere Ansätze, abhängig davon wie du den Query erzeugst.

Am leichtesten wäre:

01.
SELECT * FROM protection WHERE tag LIKE 'parameter%'
ist equiv. zu:

01.
SELECT * FROM protection WHERE tag LIKE CONCAT(parameter,'%')
Es geht natürlich auch komplizierter:

01.
SELECT *,SUBSTRING(tag FROM 0 FOR CHAR_LENGTH(parameter)) AS comp WHERE parameter = comp
Grüße

Max
Bitte warten ..
Mitglied: Dani
10.04.2009 um 21:13 Uhr
Hi Max,
die Abfrage 1 passt auf mein Problem nicht. Bie der 2. meldet mir phpMyAdmin die Funktion gibt es nicht und die 3. Abfrage versteh nicht.
Bitte warten ..
Mitglied: Dani
10.04.2009 um 21:20 Uhr
Ich erklär's am Besten noch einmal.

Ich rufe ein SQL-Abfrage auf - diese bekommt 2 Parameter. Der erste Parameter wird mit der Spalte "sid" verglichen und zwar über " WHERE sid='parameter'!. Das ist nicht das Problem...
Nun soll der 2. Parameter mit der Spalte "tag" verglichen werden und zwar sollen nur soviele Zeichen wie der String der in der Spalte "tag" drin steht.

Beispiel:
In der Spalte "tag" steht "iwus". Der 2. Parameter hat im Moment "iwus|gehas". Da "iwus" eine Länge von 4 hat, nur die ersten 4 Zeichen "iwus|gehas" angeschaut werden.


Grüße,
Dani
Bitte warten ..
Mitglied: dog
10.04.2009 um 23:17 Uhr
Ich rufe ein SQL-Abfrage auf - diese bekommt 2 Parameter

Das ist mir nicht präzise genug. Wo hast du die Abfrage erstellt, wo rufst du sie auf?

Bie der 2. meldet mir phpMyAdmin die Funktion gibt es nicht

Das kann eigentlich nicht sein. CONCAT gibt es schon ab MySQL 3.23

In der Spalte "tag" steht "iwus". Der 2. Parameter hat im Moment "iwus|gehas". Da "iwus" eine Länge von 4 hat, nur die ersten 4 Zeichen "iwus|gehas" angeschaut werden.

Ok, da hab ich dich andersrum verstanden (Nämlich dass die Zelle länger ist als der Parameter). Dann muss die Abfrage natürlich lauten:

01.
SELECT *,SUBSTRING(parameter FROM 0 FOR CHAR_LENGTH(tag)) AS comp WHERE tag = comp
Die anderen beiden kannst du vergessen, die passen nicht

Grüße

Max
Bitte warten ..
Mitglied: Dani
11.04.2009 um 01:24 Uhr
Hi Max,
die Abfrage wird aus einen Modul eines Programmes gestartet - welches das ist, tut hier nichts zur Sache. Sprich bei einem bestimmten Event wird diese dann generiert und ausgeführt.

DIe Abfrage bringt folgenden Fehler:
01.
1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE tag = comp' at line 1
Grüße,
Dani
Bitte warten ..
Mitglied: dog
11.04.2009 um 01:58 Uhr
OK, Sorry ich hatte vergessen, dass MySQL "temporäre Spalten" nicht in WHERE-Klauseln verwenden kann.
Das sollte aber jetzt funktionieren:

01.
SELECT * FROM protection WHERE tag = SUBSTRING(parameter FROM 1 FOR CHAR_LENGTH(tag));
Grüße

Max
Bitte warten ..
Mitglied: Dani
11.04.2009 um 12:57 Uhr
Hi Max,
ich habe als Parameter "siet_test" hinterlegt. Nun erscheint folgende Meldung:
01.
#1267 - Illegal mix of collations (latin1_swedish_ci,IMPLICIT) and (utf8_general_ci,COERCIBLE) for operation '='
Schau ich in meiner Struktur nach, sind alle VARCHAR-Felder in latin1. Ich habe jetzt mal alles auf UTF-8 umgestellt und siehe es geht.


Grüße,
Dani
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
PHP
MySQL-Abfrage mit php: Wert + true bzw. false (2)

Frage von tomolpi zum Thema PHP ...

Datenbanken
gelöst MYSQL Abfrage (20)

Frage von datadexx zum Thema Datenbanken ...

C und C++
gelöst IF Abfrage funktioniert nicht mehr (2)

Frage von pablovic zum Thema C und C ...

Datenbanken
gelöst SQL-Abfrage - DISTINCT - letztes Datum (3)

Frage von emeriks zum Thema Datenbanken ...

Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (21)

Frage von Xaero1982 zum Thema Microsoft ...

Windows Update
Treiberinstallation durch Windows Update läßt sich nicht verhindern (17)

Frage von liquidbase zum Thema Windows Update ...

Windows Tools
gelöst Aussendienst Datensynchronisierung (12)

Frage von lighningcrow zum Thema Windows Tools ...

Windows Server
Suche passender Treiber (12)

Frage von stolli zum Thema Windows Server ...