[MySQL] Abfrage

BenArt

Grillmeister
7 Mai 2006
26
0
Hallo,
Jaja das Jahr ist alt ;-), doch ich hab nochn Problem mit meinem neuen Rootserver. Ich brauch eine bestimmte MySQl-Abfrage für meinen Amvis-Teufel, welche ja bekanntlich in Perl geschrieben ist.
Das interessiert im Moment jedoch nicht, weil es hier nur um die MySql-Abfrage geht.

Ich hab folgendes:
Einen String gespeichert in der Perlvariable nennen wir sie mal %k. In diesem steht unter anderem eine email-adresse (z.B. [email protected]). Jetzt habe ich eine MySQL-Tabelle, in der es die Spalte domain gibt. Dort stehen viele verschiedenen Domains drin. Jetzt brauch ich eine select Abfrage, welche mir diejenige domain wiedergibt, die in der E-MAiladresse aus dem String %k ist.

Kann man das verstehen?
Ich hoffe doch.

Ich hab es so versucht(aber es funktionier nur, wenn %k nur die E-Mailadresse beinhaltet)
SELECT domain FROM domains WHERE CONCAT("@",domain) IN (%k)

Danke im Vorraus.

MfG BenArt
 
Wenn du nur die Server Adresse haben willst, ist es doch viel praktischer per Regex den Stringteil der eMail-Adresse auszulesen :?::!: :-? Oder hast du in der DB noch andere benötigte Informationen zu dem Server stehen? Es könnte doch sonst auch mal vorkommen, dass der entsprechende Server nicht in der DB vorhanden ist..
 
Genau das ist das Problem: Ist die Domain nicht in der DB, dann soll das result leer sein.

Sonst wäre es natürlich einfach.

MfG BenArt
 
hmm... wenn es klappt wenn in %k nur die email adresse steht, warum nutzt
du dann nicht $k{'email'} als referenz auf das datenfeld?

oder bin ich einfach grade nur verwirrt und verstehe gar nicht was du eigentlich bezwecken willst?
 
Ohne den Sinn zu verstehen, müsste das hier die Spezifikation erfüllen :think:
Code:
[FONT=Courier New][B][COLOR=#9932cc]SELECT[/COLOR][/B] `domain` [B][COLOR=#9932cc]FROM[/COLOR][/B] `domains`
[B][COLOR=#9932cc]WHERE[/COLOR][/B] `domain`=[B][COLOR=#9932cc]SUBSTRING[/COLOR][/B][COLOR=#9932cc]([/COLOR]%k,[/FONT][FONT=Courier New][COLOR=#9932cc][B]INSTR[/B][/COLOR][COLOR=#9932cc]([/COLOR][/FONT][FONT=Courier New]%k,'[COLOR=black]@[/COLOR]'[COLOR=#9932cc])[/COLOR]+1[COLOR=DarkOrchid])[/COLOR][/FONT]
Es werden nur die Domains ausgewählt, die mit dem Teil der Variable %k übereinstimmen, der nach dem @-Zeichen kommt (sollte in %k kein @-Zeichen sein, wird mit der gesamten Variable verglichen).

edit:
Du müsstest dir sogar den SUBSTRING mit Gleich-Vergleich schenken können und einfach nur über INSTR testen, ob die Domain von der Tabelle in der Variable ist. Musstd probieren, was für dich besser is.
 
Ein gutes neues Jahr erstmal.

@Refizul in %k steht nicht nur die e-mailadresse

@theHacker: Ich werde deine Variante jetzt mal testen. Ich weiß, dass es schwer ist, ohne den Sinn komplett zu wissen Ferndiagnosen zu machen, aber ich hatte gestern Abend nicht wirklich mehr Zeit ;-) Ich bin mir aber auch nicht sicher, ob es einfacher wäre euch die ganze Funktionalität zu erklären, weil das ist etwas komplizierter. Ich sag euch Amavisd-new ist zwar eine feine Sache, aber nur dann wenn er läuft.

MfG BenArt
 
ja eben...
normalerweise deutet ja das % auf einen Hash hin, einzelne Teile eines Hashs spricht man mit den Feldnamen an...

bsp.

PHP:
#!/usr/bin/perl

%k = ( 'Name'  =>'Egon',
       'Alter' =>31,
       'Email' =>'[email protected]',
       'Lieblingsessen'=>'Hamburger' );


print $k{'Email'};
exit;

Ausgabe: [email protected]

Das Problem welches ich nämlich nun befürchte ist die Stringumwandlung vom Hash... hier

print %k; schrieb:

hmm...
wenn du also theHackers Vorschlag benutzt und das %k durch $k{'<email_feldname>'} ersetzt dürfte das um einiges einfacher sein... *fg*

Refizul

Edit: Kurze Frage, wie bekommt man bei der [code]Klamotte eigentlich die Ausgabe so hin das das halbwegs leserlich ist? so ist die Pfui *find* und PHP progge ich ja net *fg*
 
@Refizul in %k steht nicht nur die e-mailadresse
Also mein Code geht davon aus, dass die eMail-Adresse am Ende steht. Irgendwie musst du ja die eMail-Adresse isolieren, sonst kriegst du das ja nie hin.
Edit: Kurze Frage, wie bekommt man bei der [code]Klamotte eigentlich die Ausgabe so hin das das halbwegs leserlich ist? so ist die Pfui *find* und PHP progge ich ja net *fg*
Für C, Perl, Java, JS, etc. ist das
PHP:
-Tag ideal geeignet, weil das Syntaxhighlighting fast perfekt ist. Für den Rest einfach das normale [code]-Tag benutzen.

P.S. für MySQL hab ich mir ein persönliches Tool gebastelt, um einigermaßen vernünftig zu highlighten. Wer Interesse hat, bitte PN schreiben.