Hallo Ronny!
2013/2/20 Ronny Seffner <[email protected]>:
> Ich habe die drei Expressions mal je mit einfachen Klammern umschlossen
Stimmt, die hatte ich vergessen :)
> %% This is replaced by a literal '%' character.
Ah, okay, wusste nicht dass postfix das einzelne % zerhaut.
> SELECT IF (
> (SELECT COUNT(*) FROM mail_virtual WHERE email = '%s') > 0,
> (SELECT policy_greylist FROM mail_users WHERE email = (SELECT
> destination FROM mail_virtual WHERE email = '%s')),
> (SELECT policy_greylist FROM mail_users WHERE email = (SELECT
> destination FROM mail_virtual WHERE iscatchall = 1 AND email LIKE
> CONCAT('%%@','%d')))
> )
>
> Und schon geht’s fast.
Siehste, da haben wir dir ja schon ein bisschen SQL beigebracht ;-)
Das Problem liegt nun warsch. in dem bei dir vorhandenen "AND
policy='greylist'", denn meine Abfrage liefert einen leeren String (1
Zeile mit 1 Feld) zurück (eben den Wert von "greylist"), deins liefert
0 Zeilen zurück wenn policy nicht 'greylist' ist (zumindest denke ich
das - ich hab kein testsetup wo ich das alles ausprobiere... mein Kopf
ist mein SQL parser ;) ).
Bauen wir auch gleich noch dein gewünschtes Limit 1 mit ein, dann
sieht es so aus:
SELECT IF (
(SELECT COUNT(*) FROM mail_virtual WHERE email = '%s') > 0,
(SELECT policy_greylist FROM mail_users WHERE email = (SELECT
destination FROM mail_virtual WHERE email = '%s') AND policy_greylist
= 'greylist' LIMIT 1),
(SELECT policy_greylist FROM mail_users WHERE email = (SELECT
destination FROM mail_virtual WHERE iscatchall = 1 AND email LIKE
CONCAT('%%@','%d')) AND policy_greylist = 'greylist' LIMIT 1)
)
Gehts dann? Sonst ist der Fehler noch woanders ;)
Viele Grüße!
--
morphium - [email protected] - 113332157
http://identi.ca/morphium - http://twitter.com/morphium86
_______________________________________________
Lug-dd maillist - [email protected]
https://ssl.schlittermann.de/mailman/listinfo/lug-dd