Привет все!
У меня есть SQL (см. выше), и я хотел бы знать, как я могу удостовериться, что не добираюсь, удваивается относительно имени только. если имя появляется в первом Выборе, это - ведущее устройство и должно быть проигнорировано в следующем, выбирает.
"SELECT name, id, 'place' AS tablename FROM places WHERE lower(name) LIKE '".strtolower($needle)."%'"
."UNION SELECT name, id, 'community' AS tablename FROM communities WHERE lower(name) LIKE '".strtolower($needle)."%'"
."UNION SELECT name, id, 'district' AS tablename FROM districts WHERE lower(name) LIKE '".strtolower($needle)."%'"
."UNION SELECT name, id, 'region' AS tablename FROM regions WHERE lower(name) LIKE '".strtolower($needle)."%'"
."UNION SELECT name, id, 'province' AS tablename FROM provinces WHERE lower(name) LIKE '".strtolower($needle)."%'"
."ORDER BY name LIMIT 10"
это - мой SQL.
Вам нужно больше информации?
спасибо
SELECT DISTINCT ON (name) name, id, tablename
FROM (
SELECT name, id, 'place' AS ...
UNION ...
UNION ...
UNION ...
UNION ...) AS subQuery
ORDER BY name LIMIT 10
Просто укажите, что нужно различать только имя
, используя ваш запрос в качестве подзапроса.
Выполните ограничение и упорядочение во время отдельного, иначе отдельный может отбросить дубли и не отдать полные 10 строк в правильном отсортированном порядке.