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

Antwort per Email an