2010-06-24 33 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注入警報! – 2010-06-24 16:36:36

+0

它只是用來測試它是如何工作的,接下來是安全性;-) – helle 2010-06-24 16:38:05

+1

你能告訴我注入的地方嗎?我現在在安全步驟;-) – helle 2010-06-24 16:52:43

回答

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 2010-06-24 16:39:46

+0

哎呀,錯過了。嘗試新編輯的查詢。 – 2010-06-24 16:40:43

+0

謝謝...但根本不起作用:-( 我必須使用子查詢的別名...選擇獨特... FROM(...)AS subqueryname ORDER ... 現在它作品 – helle 2010-06-24 16:47:33