have you tried this?
UNION
SELECT placeId, urlRef, name, ico, 0 AS lv
FROM places
WHERE LENGTH(:placeLike) > 3 AND name REGEXP :placeLike
Question
In the following statement:
SELECT placeId, name, ico, lv, url
FROM
(
SELECT placeId, urlRef, name, ico, lv
FROM
(
SELECT placeId, urlRef, name, ico, levenshtein_ratio( :place, name ) AS lv
FROM places
WHERE name SOUNDS LIKE :place AND dm( name ) = dm( :place )
HAVING lv > 59
UNION
SELECT placeId, urlRef, placeNameVariants.name AS name, ico, levenshtein_ratio( :place, placeNameVariants.name ) AS lv
FROM placeNameVariants
LEFT JOIN places ON placeRef = placeId
WHERE placeNameVariants.name SOUNDS LIKE :place AND dm( placeNameVariants.name ) = dm( :place )
HAVING lv > 59
UNION
SELECT placeId, urlRef, name, ico, 0 AS lv
FROM places
WHERE name REGEXP :placeLike
) AS subA
ORDER BY lv DESC
) As subB
LEFT JOIN urls ON urlRef = urlId
GROUP BY placeId
I only want to run the SELECT after the third UNION (line 20) when a string is more than 3 characters, e.g.
IF( CHAR_LENGTH( :placeLike ) > 3 ) THEN
UNION
SELECT placeId, urlRef, name, ico, 0 AS lv
FROM places
WHERE name REGEXP :placeLike
But I cannot find any way of doing this. Is there a way? Or a best practice here. At the moment I am sending '^$' to the REGEXP when :placeLike is 3 ro less chars, which doesn't seem like a great solution.
Solution
have you tried this?
UNION
SELECT placeId, urlRef, name, ico, 0 AS lv
FROM places
WHERE LENGTH(:placeLike) > 3 AND name REGEXP :placeLike
OTHER TIPS
Is this what you want on that last union?
...
UNION
SELECT placeId, urlRef, name, ico, 0 AS lv
FROM places
WHERE length(name) > 3
...
But I am not really sure I understand what "placelike" is supposed to be. Is it a variable? Is it a standard regex? I don't get it. I understand it is a bind variable, but I can't tell what is supposed to be in it.