2010-06-24 3 views
6

Приветствую всех!Как игнорировать столбец для выделения отдельных в postgresql?

У меня есть 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.

Вам нужна дополнительная информация?

благодаря

+0

SQL Injection Alert! –

+0

это просто для тестирования того, как это работает, безопасность приходит следующей ;-) – helle

+1

не могли бы вы сказать мне, где находится инъекция? теперь я на шаге безопасности ;-) – helle

ответ

5

DISTINCT

SELECT DISTINCT ON (name) name, id, tablename 
FROM (
    SELECT name, id, 'place' AS ... 
    UNION ... 
    UNION ... 
    UNION ... 
    UNION ...) AS subQuery 
ORDER BY name LIMIT 10 

Просто укажите только сделать отчетливый на name, используя запрос в качестве подзапроса.

Сделайте лимит и порядок в течение отчетливого, иначе отличительные могут отбросить обман и не сдавать все 10 строк в правильном порядке сортировки.

+0

, если я добавлю его для каждого выбора, разные таблицы выбираются disticnt, но в союзе у меня есть удвоения. – helle

+0

Упс, пропустил это. Попробуйте новый отредактированный запрос. –

+0

спасибо ... но не работает вообще :-( Мне нужно использовать псевдоним для подзапроса ... Выберите Distinct ... FROM (...) AS имя подзапроса ORDER ... сейчас это работает – helle