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, 6613 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
Exchange Server

WSUS bietet CU22 für Exchange 2007 SP3 nicht an. EOL Exchange 2007

Tipp von DerWoWusste zum Thema Exchange Server ...

Ähnliche Inhalte
Datenbanken
gelöst MySQL Abfrage um JOIN erweitern (14)

Frage von datadexx zum Thema Datenbanken ...

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

Frage von tomolpi zum Thema PHP ...

Apache Server
gelöst Fehler beim Import einer DB vom anderen MySQL-Server (2)

Frage von zeroblue2005 zum Thema Apache Server ...

Datenbanken
Tool oder Dienst für E-Mail (POP3) zu MySQL Datenbank (3)

Frage von bounee zum Thema Datenbanken ...

Heiß diskutierte Inhalte
Exchange Server
Test-ActiveSyncConnectivity Error nach neuem Zertifikat (17)

Frage von Driphex zum Thema Exchange Server ...

Batch & Shell
gelöst Batch xls nach aktuellem Datum auslesen und email senden (14)

Frage von michi-ffm zum Thema Batch & Shell ...

Backup
Datensicherung ARCHIV (12)

Frage von fautec56 zum Thema Backup ...